在 ForeignKey 上设置 unique=True 与使用 OneToOneField 具有相同的效果

Setting unique=True on a ForeignKey has the same effect as using a OneToOneField

我最近从 1.7 切换到 Django 1.8.2,但我遇到了一些问题,例如在我的一个模型中:

class Author(models.Model):
    author = models.ForeignKey(UserProfile, blank=False, primary_key=True)
    timestamp = models.DateTimeField(auto_now_add=True)

但是当我 运行 服务器时,我遇到了以下警告:

WARNINGS:
exam.Author.author: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.

我该怎么办?

primary_key 表示 unique=True。因此,正如警告所说,您可能应该使用 OneToOneField。

作为 ,您最好使用 OneToOneField

可以在 this Stack Overflow Question.

找到关于为什么会这样的很好的解释

简而言之,Django 要求您将 ForeignKey 字段替换为:

author = models.OneToOneField(UserProfile, blank=False, primary_key=True)

此外,我建议添加一个 on_delete 键,并将其设置为:

author = models.OneToOneField(UserProfile, blank=False, primary_key=True, on_delete=models.CASCADE)

参考: https://docs.djangoproject.com/en/3.2/topics/db/examples/one_to_one/