4

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

我应该怎么办?

4

3 回答 3

3

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

于 2015-06-18T12:37:41.053 回答
3

正如丹尼尔所说,您最好使用OneToOneField.

关于为什么会这样的一个很好的解释可以在这个 Stack Overflow Question中找到。

于 2015-11-24T23:14:01.607 回答
0

简而言之,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/

于 2021-09-07T18:51:11.383 回答