मैं (डेटा फ़ील्ड छोड़े गए) इस तरह की एक Django डाटा मॉडल है: तो यह Transition.objects.filter(...)
पर क्वेरी करने के लिए सबसे आसान है,Django नेस्टेड क्वेरीसमूहों
class Atom(Model):
pass
class State(Model):
atom = ForeignKey(Atom)
class Transition(Model):
atom = ForeignKey(Atom)
upstate = ForeignKey(State,related_name='uptrans')
lostate = ForeignKey(State,related_name='lotrans')
जब मैं क्वेरी, खेतों या तो मॉडल में हो सकता है प्रतिबंधित किया जा करने के लिए चूंकि अन्य मॉडलों के सभी क्षेत्रों को विदेशी कुंजी के माध्यम से पहुंचा जा सकता है। आइए परिणामी QuerySet t
पर कॉल करें।
अब जो मैं चाहता हूं वह एटम मॉडल का एक क्वेरीसेट a
है जो t
से मेल खाता है, जो a = t.values('atom').distinct()
जैसा किया जा सकता है। अब तक सब ठीक है।
हालांकि, मैं भी a
में प्रविष्टियों में से प्रत्येक के लिए चाहते हैं upstate
दोनों में से किसी एक के माध्यम से एक विशेषता/क्षेत्र है कि इस एटम, अभी भी मूल चयन t
पर मापदंड को दर्शाती है की स्टेट्स क्वेरीसमूह रखती है, के लिए या lostate
विदेशीकेज़।
मैं अब तक t
से अधिक पाशन, डुप्लिकेट बाहर फेंक, और फिर इस सूची के साथ अमेरिका की क्वेरी के लिए values('upstate_id')
और values('lostate_id')
एक अजगर set()
को जोड़कर स्टेट्स पर मेरे क्वेरीसमूह बनाया है। लेकिन फिर मैं परमाणुओं के भीतर राज्यों की घोंसला वाली संरचना को प्राप्त नहीं कर सकता।
अनगिनत QuerySet
एस के साथ यदि संभव हो तो यह करने के तरीके पर कोई सुझाव है, क्योंकि मैं उन्हें टेम्पलेट में नहीं बल्कि एक जनरेटर (yield
कथन) पास करता हूं, जो बड़ी मात्रा में डेटा स्ट्रीम करने का एक अच्छा तरीका है।