PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да свържете две таблици в поле за външен ключ, използвайки django ORM?

Работя с 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 .

Сега помислете за следните views.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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между индекса GiST и GIN

  2. Незаконна инструкция:4 при стартиране на Django

  3. как да покажа пълния код на съхранената процедура?

  4. Как да покажа номера на редове в заявка на PostgreSQL?

  5. Продължаване на транзакция след грешка при нарушение на първичния ключ