ForeignKey(unique=True) 通常由 OneToOneField 提供更好的服务

A.R*_*ouf 2 django django-models makemigrations

class Categories(models.Model):
    id = models.ForeignKey('auth.User',primary_key=True)
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=300)

    def __str__(self):
        return Categories.name

    class Meta:
        order_with_respect_to = 'id'


class Specializations(models.Model):
    id = models.ForeignKey('auth.User',primary_key=True)
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=300)
    categories = models.ForeignKey(Categories, on_delete=models.CASCADE)


    def __str__(self):
        return Specializations.name
Run Code Online (Sandbox Code Playgroud)

course.Categories.id: (fields.W342) 在外键上设置 unique=True 与使用 OneTo OneField 具有相同的效果。

    HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
Run Code Online (Sandbox Code Playgroud)

course.Courses.id:(fields.W342) 在外键上设置 unique=True 与使用 OneToOne 字段具有相同的效果。

    HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
Run Code Online (Sandbox Code Playgroud)

course.Specializations.id: (fields.W342) 在外键上设置 unique=True 与使用 OneToOneField 具有相同的效果。

尽管关系是一对多,但仍会出现此警告或错误!不是一对一

ils*_*005 5

您设计模型的方式本质上是一种OneToOne关系,因为您将 设定ForeignKey为 the primary_key(这会自动应用unique=True)。

您真的希望用户成为primary_keyCategoriesSpecializations

我想你想要这样的东西:

class Categories(models.Model):
    user = models.ForeignKey('auth.User')
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=300)

    def __str__(self):
        return self.name


class Specializations(models.Model):
    user = models.ForeignKey('auth.User')
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=300)
    categories = models.ForeignKey(Categories, on_delete=models.CASCADE)


    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

有了这个,User可以有很多CategoriesSpecializations 我也改变了__str__方法self.name