Django, добавление двух внешних ключей к одной модели - PullRequest
1 голос
/ 16 января 2020

У меня есть таблица, которая связывает одну строку в таблице контекста с другой строкой в ​​таблице контекста. В Django я пытаюсь добавить два внешних ключа, и он говорит, что мне нужно использовать связанное имя. Я читал документацию по связанному имени, но я не могу понять это. Я включаю рабочую модель ниже с закомментированными строками. После я также включаю шаблон. Кто-нибудь может исправить приведенный ниже код?

model.py

class Relationship (models.Model):
    relationship_id = models.AutoField(primary_key=True)
    # context_id1 = models.IntegerField()
    context_id1 = models.ForeignKey(Context, db_column='context_id1', on_delete = models.PROTECT)
    context_id2 = models.IntegerField()
    # context_id2 = models.ForeignKey(Context, db_column='context_id2', on_delete = models.PROTECT)
    relationship = models.CharField(max_length = 50, blank=True, null=True)

template

  {% for relationship in context.relationship_set.all %}
      Current Context:{{relationship.context_id1.number}} <br> # works
      Relationship:{{relationship.relationship}} <br> # works
      Related Context: {{relationship.context_id2.number}} # fails
  {% endfor %}

1 Ответ

1 голос
/ 16 января 2020

related_name=&hellip; [Django -doc] - это название вашего отношения "в обратном порядке". Так от Context до Relationship. Так как вы нацеливаетесь на одну и ту же модель дважды, оба не могут быть названы как relationship_set Таким образом, вы можете дать эти разные related_name с. Например:

class Relationship(models.Model):
    id = models.AutoField(primary_key=True, db_name='relationship_id')
    context1 = models.ForeignKey(
        Context,
        db_column='context_id1',
        on_delete = models.PROTECT,
        <b>related_name='relations_through1'</b>
    )
    context1 = models.ForeignKey(
        Context,
        db_column='context_id1',
        on_delete = models.PROTECT,
        <b>related_name='relations_through2'</b>
    )
    relationship = models.CharField(max_length = 50, blank=True, null=True)

Примечание : Обычно к полю ForeignKey не добавляется суффикс _id, поскольку Django автоматически добавляет «двойник» "поле с суффиксом _id. Следовательно, оно должно быть context1 вместо context_id1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...