मैं कुछ समय के लिए django के साथ काम कर रहा हूं और मुझे टेबल जॉइन करने में काफी कठिन समय मिला है, लेकिन मुझे लगता है कि मैं अंततः समझता हूं और मैं इसे दूसरों को पास करना चाहता हूं ताकि वे उस निराशा से बच सकें जो मेरे पास थी इसके साथ।
निम्नलिखित model.py पर विचार करें:
class EventsMeetinglocation(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
address = models.CharField(max_length=200)
class Meta:
managed = True
db_table = 'events_meetinglocation'
class EventsBoardmeeting(models.Model):
id = models.IntegerField(primary_key=True)
date = models.DateTimeField()
agenda_id = models.IntegerField(blank=True, null=True)
location_id = models.ForeignKey(EventsMeetinglocation)
minutes_id = models.IntegerField(blank=True, null=True)
class Meta:
managed = True
db_table = 'events_boardmeeting'
यहां हम देख सकते हैं कि location_id
EventsBoardmeeting
. में EventsMeetinglocation
. में आईडी के लिए एक विदेशी कुंजी है . इसका मतलब है कि हमें EventsMeetinglocation
. में जानकारी को क्वेरी करने में सक्षम होना चाहिए EventsBoardmeeting
. के माध्यम से जाकर .
अब निम्नलिखित विचारों पर विचार करें.py:
def meetings(request):
meetingData = EventsBoardmeeting.objects.all()
return render(request, 'board/meetings.html', {'data': meetingData })
जैसा कि पहले कई बार अन्य पदों में कहा गया है, django स्वचालित रूप से जुड़ने का ख्याल रखता है। जब हम EventsBoardmeeting
. में सब कुछ क्वेरी करते हैं हम विदेशी कुंजी द्वारा भी कोई भी संबंधित जानकारी प्राप्त करते हैं, लेकिन जिस तरह से हम इसे html में एक्सेस करते हैं वह थोड़ा अलग है। हमें उस जॉइन से जुड़ी जानकारी तक पहुंचने के लिए विदेशी कुंजी के रूप में उपयोग किए जाने वाले चर के माध्यम से जाना होगा। उदाहरण के लिए:
{% for x in data %}
{{ x.location_id.name }}
{% endfor %}
उपरोक्त तालिका में उन सभी नामों का संदर्भ देता है जो विदेशी कुंजी पर शामिल होने का परिणाम थे। x
अनिवार्य रूप से EventsBoardmeeting
है तालिका, इसलिए जब हम x.location_id
. तक पहुँचते हैं हम विदेशी कुंजी का उपयोग कर रहे हैं जो हमें EventsMeetinglocation
. में जानकारी तक पहुंच प्रदान करती है .