簡體   English   中英

django rest framework如何刪除多余的查詢?

[英]django rest framework How to delete redundant queries?

我使用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',
        ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM