sql >> Databáze >  >> RDS >> PostgreSQL

Jak spojíte dvě tabulky v poli cizího klíče pomocí django ORM?

S django pracuji už nějakou dobu a měl jsem docela těžké chvíle, když jsem zjistil, jak se ke stolu připojit, ale myslím, že to konečně chápu a rád bych to předal ostatním, aby se vyhnuli frustraci, kterou jsem měl já s tím.

Zvažte následující 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'

Zde vidíme location_id v EventsBoardmeeting je cizí klíč pro id v EventsMeetinglocation . To znamená, že bychom měli být schopni dotazovat se na informace v EventsMeetinglocation pomocí EventsBoardmeeting .

Nyní zvažte následující views.py:

def meetings(request):
    meetingData = EventsBoardmeeting.objects.all()
    return render(request, 'board/meetings.html', {'data': meetingData })

Jak již bylo mnohokrát uvedeno v jiných květnových příspěvcích, django se o připojení stará automaticky. Když se zeptáme na vše v EventsBoardmeeting veškeré související informace získáváme také cizím klíčem, ale způsob, jakým k tomu přistupujeme v html, je trochu jiný. Pro přístup k informacím spojeným s tímto spojením musíme projít proměnnou používanou jako cizí klíč. Například:

{% for x in data %}
   {{ x.location_id.name }}
{% endfor %}

Výše uvedené odkazy na VŠECHNY názvy v tabulce, které byly výsledkem spojení cizího klíče. x je v podstatě EventsBoardmeeting tabulka, takže když přistupujeme k x.location_id přistupujeme k cizímu klíči, který nám umožňuje přístup k informacím v EventsMeetinglocation .



  1. Jak Group_Concat() funguje v SQLite

  2. Úvod do SQL

  3. Jak ušetřím vyhrazená slova použitá jako názvy sloupců? MySQL/Vytvořit tabulku

  4. Formát proměnné MySQL pro seznam hodnot NOT IN