Djangoを使用debug_toolbar
してSQLクエリを表示し、2番目のSQLクエリを削除したいと思います。
1.(SELECT ... FROM auth_user LEFT OUTER JOIN accounts_userextension ON (auth_user.id = accounts_userextension.user_id) 50.86474349085549% 28.30 Sel
Expl)
2.(SELECT ... FROM auth_user LIMIT 1000 49.13525650914451% 27.34 Sel Expl)
ここにありmodels.py
ます:
class UserExtension(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,related_name='user_detail')
birthday = models.DateField(null=True,blank=True)
ここにありserializers.py
ます:
from django.contrib.auth.models import User
from .models import UserExtension
class UserExtensionSerializer(serializers.ModelSerializer):
class Meta:
model = UserExtension
fields = '__all__'
class accountDetailSerializer(serializers.ModelSerializer):
user_detail = UserExtensionSerializer()
class Meta:
model = User
fields = [
"username",
"email",
"first_name",
'user_detail',
]
ここにありviews.py
ます:
class AccountView(generics.ListCreateAPIView):
queryset = User.objects.all().select_related('user_detail')
serializer_class = accountDetailSerializer
permission_classes = ()
余分なクエリはuser_detail = UserExtensionSerializer()
。のためだと思います。以下のコードを試してください。私はテストしていませんが、動作するはずです。
class accountDetailSerializer(serializers.ModelSerializer):
user_details = UserExtensionSerializer(source='user_detail')
class Meta:
model = User
fields = [
"username",
"email",
"first_name",
'user_details',
]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加