在Django的orm的外键下引用了模型的哪个特定字段?

时间:2019-11-05 13:52:03

标签: django-models

我有两个类“ topics”和“ webpage”,我正在尝试将webpage.category分配为引用topic.top_name的外键。

但是不同于原始sql,外键可以引用另一个表中的特定字段,在Django的orm中,我们仅提供引用的类(表的)名称,而不是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 :(得分:0)

您可以在ForeignKey构造函数中设置to_field=… [Django-doc]

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, to_field='top_name', on_delete=models.CASCADE)
    name = models.CharField(max_length=264)
    url = models.URLField()

如文档中所指定,您所引用的字段应为唯一(这当然是有道理的,因为否则它将是不明确的)。

请注意,通常,引用列的collation [mysql-doc]和目标列应该相同。否则,当两个字段相等时并不清楚。

如果您未指定to_field,它将使用目标模型的主键。