какое конкретное поле модели указано под внешним ключом в форме Джанго? - PullRequest
1 голос
/ 05 ноября 2019

У меня есть два класса «themes» и «webpage», и я пытаюсь назначить webpage.category в качестве внешнего ключа, ссылающегося на themes.top_name.

Но в отличие от raw sql, где внешний ключ может ссылатьсяДля определенного поля в другой таблице в django мы просто указываем имя класса (таблицы), на который ссылаются, а не конкретное поле, на которое ссылается FK.

class Topic(models.Model):
    top_name = models.CharField(max_length=264, unique=True)
        top_author = models.CharField(max_length=264)

class Webpage(models.Model):
    category = models.ForeignKey(Topic)
        name = models.CharField(max_length=264)
    url = models.URLField()

1 Ответ

0 голосов
/ 05 ноября 2019

Вы можете установить to_field=… [Django-doc] в конструкторе ForeignKey:

class Topic(models.Model):
    top_name = models.CharField(max_length=264, unique=True)
    top_author = models.CharField(max_length=264)

class Webpage(models.Model):
    category = models.ForeignKey(Topic<b>, to_field='top_name'</b>, on_delete=models.CASCADE)
    name = models.CharField(max_length=264)
    url = models.URLField()

Как указано в документации,поле, на которое вы ссылаетесь, должно быть уникальным (что, конечно, имеет смысл, поскольку в противном случае оно будет неоднозначным).

Обратите внимание, что обычно сопоставление [mysql-doc] ссылочного столбца и целевого столбца должны совпадать. Иначе не совсем ясно, когда два поля равны.

Если вы не укажете to_field, он будет использовать первичный ключ целевой модели.

...