क्या डीजेंगो टेम्पलेट में संबंधित वस्तुओं के एक सेट को छांटना संभव है?
वह है: यह कोड (HTML टैग के साथ स्पष्टता के लिए छोड़ा गया):
{% for event in eventsCollection %}
{{ event.location }}
{% for attendee in event.attendee_set.all %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
लगभग बिल्कुल मैं चाहता हूँ प्रदर्शित करता है । केवल एक चीज जिसे मैं बदलना चाहता हूं, मैं अंतिम नाम के आधार पर छांटे जाने वाले प्रतिभागियों की सूची है। मैंने ऐसा कुछ कहने की कोशिश की है:
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_set.order_by__last_name %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
काश, उपरोक्त सिंटैक्स काम नहीं करता (यह एक खाली सूची का उत्पादन करता है) और न ही किसी भी अन्य भिन्नता के बारे में मैंने सोचा है (बहुत से वाक्यविन्यास त्रुटियों की रिपोर्ट की गई है, लेकिन कोई खुशी नहीं)।
मैं, निश्चित रूप से, मेरे विचार में कुछ प्रकार के छांटे गए सहभागी सूचियों का उत्पादन कर सकता हूं, लेकिन यह एक बदसूरत और नाजुक है (और क्या मैंने बदसूरत उल्लेख किया है) समाधान।
कहने की जरूरत नहीं है, लेकिन मैं इसे वैसे भी कहूंगा, मैंने ऑन-लाइन डॉक्स का दुरुपयोग किया है और स्टैक ओवरफ्लो और django-user के अभिलेखागार को कुछ भी उपयोगी पाए बिना (आह, अगर केवल एक क्वेरी सेट एक डिक्शनरी डिकोर्टॉर्ट करेंगे नौकरी, लेकिन यह नहीं है और यह नहीं है)
==============================================
तवामास के उत्तर को स्वीकार करने के बाद अतिरिक्त विचार जोड़ने का संपादन किया।
तवामास ने इस मुद्दे को ठीक उसी तरह संबोधित किया जैसा मैंने प्रस्तुत किया था - हालाँकि समाधान वह नहीं था जिसकी मुझे उम्मीद थी। परिणामस्वरूप मैंने एक उपयोगी तकनीक सीखी जिसका उपयोग अन्य स्थितियों में भी किया जा सकता है।
टॉम के जवाब ने एक दृष्टिकोण का प्रस्ताव दिया जिसे मैंने पहले ही अपने ओपी में उल्लेख किया था और "बदसूरत" के रूप में अस्थायी रूप से खारिज कर दिया था।
"बदसूरत" एक आंत प्रतिक्रिया थी, और मैं स्पष्ट करना चाहता था कि इसके साथ क्या गलत था। ऐसा करने में मुझे एहसास हुआ कि इसका कारण यह एक बदसूरत दृष्टिकोण था क्योंकि मैं एक क्वेरी सेट को पारित करने के विचार पर लटका दिया गया था। अगर मैं उस आवश्यकता को पूरा करता हूं, तो एक बदसूरत दृष्टिकोण है जो काम करना चाहिए।
मैंने अभी तक यह कोशिश नहीं की है, लेकिन मान लीजिए कि क्वेरीसेट को पास करने के बजाय, व्यू कोड को क्वेरी सेट के माध्यम से पुनरावृत्त किया गया, जो ईवेंट की एक सूची का निर्माण करता है, फिर प्रत्येक ईवेंट को संबंधित उपस्थितियों के लिए एक क्वेरी सेट के साथ सजाया गया, जिसे WAS सॉर्ट किया गया था (या फ़िल्टर किया गया था) या जो भी) वांछित तरीके से। कुछ इस तरह:
eventCollection = []
events = Event.object.[filtered and sorted to taste]
for event in events:
event.attendee_list = event.attendee_set.[filtered and sorted to taste]
eventCollection.append(event)
अब टेम्प्लेट बन जाता है:
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_list %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
नकारात्मक पक्ष यह है कि सभी घटनाओं को एक ही बार में "वास्तविक" करना है जो कि बड़ी संख्या में होने वाली घटनाओं के कारण एक समस्या हो सकती है। बेशक कोई भी जोड़-तोड़ कर सकता है, लेकिन इससे दृश्य काफी जटिल हो जाता है।
उल्टा "डेटा को प्रदर्शित करने के लिए तैयार करें" कोड उस दृश्य में है जहां वह टेम्पलेट को प्रदर्शन के लिए दृश्य द्वारा प्रदान किए गए डेटा को प्रारूपित करने पर ध्यान केंद्रित करने देता है। यह सही और उचित है।
इसलिए मेरी योजना बड़े तालिकाओं के लिए तवामास तकनीक और छोटी तालिकाओं के लिए उपरोक्त तकनीक का उपयोग करना है, जिसमें पाठक को बड़ी और छोटी छोड़ दी गई है (मुस्कराहट)।