I use Django debug_toolbar
to see SQL query and I want to delete the second SQL query.
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)
Here is 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)
Here is 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',
]
Here is views.py
:
class AccountView(generics.ListCreateAPIView):
queryset = User.objects.all().select_related('user_detail')
serializer_class = accountDetailSerializer
permission_classes = ()
I think the extra query is because of user_detail = UserExtensionSerializer()
. Try below code. I've not tested but it should work.
class accountDetailSerializer(serializers.ModelSerializer):
user_details = UserExtensionSerializer(source='user_detail')
class Meta:
model = User
fields = [
"username",
"email",
"first_name",
'user_details',
]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.