मेरे Django ऐप के लिए मेरे पास ईवेंट, रेटिंग और उपयोगकर्ता हैं। रेटिंग विदेशी कुंजी के माध्यम से घटनाओं और उपयोगकर्ताओं से संबंधित हैं। घटनाओं की एक सूची प्रदर्शित करते समय मैं उपयोगकर्ता_आईडी द्वारा ईवेंट की रेटिंग फ़िल्टर करना चाहता हूं, इसलिए मुझे पता है कि उपयोगकर्ता द्वारा कोई ईवेंट रेट किया गया है या नहीं।Django - संबंधित वस्तुओं पर फ़िल्टरिंग
अगर मैं कार्य करें:
event_list = Event.objects.filter(rating__user=request.user.id)
... तो मैं सिर्फ घटनाओं है कि उपयोगकर्ता द्वारा दर्ज़ा दिया गया रहे हैं (request.user.id वर्तमान उपयोगकर्ता में लॉग इन के user_id देता है) और नहीं पूरे घटनाओं की सूची।
क्या मैं कस्टम एसक्यूएल के माध्यम से उत्पन्न किया जा सकता की जरूरत है:
SELECT *
FROM `events_event`
LEFT OUTER JOIN (
SELECT *
FROM `events_rating`
WHERE user_id = ##
) AS temp
ON events_event.id = temp.user_id
वहाँ एक आसान तरीका है तो मैं कस्टम एसक्यूएल उपयोग करने के लिए नहीं है?
रेटिंग_सेट वह प्रबंधक है जो रेटिंग के संबंधों का प्रबंधन करता है, इसलिए यह हमेशा मौजूद रहेगा। यहां तक कि यदि आपने एक .count या .all जोड़ दिया है, तो यह आपको वर्तमान रेटिंग के लिए न केवल सभी रेटिंग के लिए विवरण देगा। –
यह मेरा प्रश्न नहीं है :-) e.rating_set एक django.db.models.fields.related.RelatedManager होगा, इसलिए {% अगर e.rating_set%} हमेशा पास होगा। इसे पुन: प्रयास करने का प्रयास करने से आपको TypeError मिल जाएगा: 'relatedManager' ऑब्जेक्ट पुनरावर्तनीय नहीं है।अपना इच्छित व्यवहार प्राप्त करने के लिए आपको e.rating_set.all का उपयोग करना होगा। –