Django 1.5 - पायथन, django, फ़िल्टर, गिनती में उन्नत model_set.count

मैं जानता हूं उदा। object.poll_set.count, लेकिन मैं इन्हें कैसे फ़िल्टर कर सकता हूं, इसलिए मुझे केवल कुछ वस्तुओं की गणना मिलती है, जिनकी मैं जनमत सर्वेक्षण करता हूं। मेरा मतलब कुछ ऐसा है object.poll_set.filter(pk<20).count। मुझे लगता है कि मुझे इसे प्रस्तुति के बजाय तर्क में करना होगा, लेकिन इसे करने के लिए बेहतर तरीका क्या है?

मुझे कुछ की "नेस्टेड काउंट" खोजने की भी आवश्यकता हैवस्तुओं। मेरे तीन मॉडल हैं (मॉडल 1, मॉडल 2, मॉडल 3)। मॉडल 3 में मॉडल 2 के लिए एफके है, और मॉडल 2 में मॉडल के लिए एफके है। 1 मॉडल 1 में मैं मॉडल 2 से रिकॉर्ड की संख्या प्राप्त कर सकता हूं जो मॉडल 1 को संदर्भित करता है, लेकिन मुझे मॉडल 3 से रिकॉर्ड की संख्या की भी आवश्यकता है मॉडल 2 में किसी भी वस्तु को संदर्भित करता है जो मॉडल 1 में विशिष्ट वस्तु को संदर्भित करता है।

मैं सूची 1 में मॉडल 1 से वस्तुओं को प्रिंट करता हूं।मैं मॉडल 2 में रिकॉर्ड की कुल संख्या कैसे प्राप्त कर सकता हूं जो मॉडल 1 में किसी भी ऑब्जेक्ट को संदर्भित करता है, अर्थात प्रत्येक ऑब्जेक्ट में मुझे मिली वस्तुओं की संख्या का एक भव्य कुल। क्या मुझे इसे टेम्पलेट और प्रिंट में अपने लूप में गिनना चाहिए। में है <tfoot>?

उत्तर:

जवाब के लिए 0 № 1

सही वाक्यविन्यास है object.poll_set.filter(pk__lt=20).count()। Django मानों की तुलना करने के लिए विशेष नामों का उपयोग करता है __lte, __iexact आदि देखें https://docs.djangoproject.com/en/1.5/ref/models/querysets/#field-lookups । यह पहले संस्करण के बाद से Django में रहा है।

"लूप के अंदर की गिनती न करें क्योंकि आपके पास एअनावश्यक डेटाबेस लुकअप के बहुत सारे। इसलिए जब आपके पास दो मॉडल हैं: मॉडल 1 (माता-पिता), मॉडल 2 (बच्चा) और प्रत्येक मॉडल 1 को मॉडल 2 की संख्या के साथ देखना चाहते हैं, आप करते हैं Model1.objects.filter(whatever).annotate(model2_count=Count("model2"))

EDIT: यह स्पष्ट करने के लिए कि कस्टम काउंट कार्यक्षमता कहाँ होनी चाहिए

आपका विचार इस तरह दिख सकता है:

views.py

def model1_list(request):
objects = Model1.objects.all().annotate(model2_count=Count("model2"))
return TemplateResponse(request, "your_template.html", {"objects":objects})

और आपका टेम्पलेट "your_template.html":

{% for o in objects %}
<b>{{ o }}</b> - model2s: {{ o.model2_count }} <br/>
{% endfor %}

संबंधित सवाल
सबसे लोकप्रिय