我使用 Django debug_toolbar
查看 SQL 查询,我想删除第二个 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',
]
关于python - django Rest框架如何删除多余的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57178737/