我有两个类“ 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()
答案 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
,它将使用目标模型的主键。