स्वीकार किए गए समाधान डेटाबेस लौटाएंगे जितनी बार परिणाम लौटाए जाते हैं। प्रत्येक परिणाम के लिए, डेटाबेस को count
क्वेरी बनाया जाएगा।
प्रश्न सीरिएलाइज़र को एनोटेशन जोड़ने के बारे में है, जो प्रतिक्रिया में प्रत्येक आइटम के लिए count
क्वेरी करने से अधिक प्रभावी है।
उस के लिए एक समाधान:
models.py
class Author(models.Model):
name = models.CharField(...)
other_stuff = models...
...
class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(...)
publication_year = models...
...
serializers.py
class BookSerializer(serializers.ModelSerializer):
authors = serializer.IntegerField()
class Meta:
model = Book
fields = ('id', 'title', 'authors')
views.py
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.annotate(authors=Count('author'))
serializer_class = BookSerializer
...
कि डेटाबेस में गिनती कर देगा स्तर, टी से परहेज o Book
आइटमों में से प्रत्येक के लिए लेखक गणना प्राप्त करने के लिए डेटाबेस हिट करें।
स्रोत
2016-04-18 14:57:09
क्या आप समझा सकते हैं - क्यों फिवर का समाधान बहुत सारे प्रश्न उत्पन्न करेगा? मैंने सोचा कि सीरिएलाइज़र फ़ील्ड को क्वेरीसेट निष्पादित करने के बाद संसाधित किया जाएगा, जो उचित शामिल/समूहिंग करेगा? – DmitrySemenov
मैंने इसे 'फ़ील्ड (स्रोत =' एनोटेटेड_फील्ड ') ' – outoftime
@DmitrySemenov के साथ बनाया है, मुझे लगता है कि स्रोत तर्क एक विधि को संदर्भित नहीं करेगा। मेरे पास पहले मेरे कोड पर "स्रोत = 'author_set.count' था, लेकिन यह बहुत सारे प्रश्न उत्पन्न कर रहा था (आप इसे डीबगर से देख सकते हैं), अधिकांश प्रश्न दोहराए गए थे, और गिनती विधि कहा जाता था। – Tobias