在 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/
我最近从 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/