ForeignKey(unique=True) обычно лучше обслуживается OneToOneField

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

courses.Categories.id: (fields.W342) Установка уникального =True для ForeignKey имеет тот же эффект, что и использование OneTo OneField.

    HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.

courses.Courses.id: (fields.W342) Установка уникального =True для ForeignKey имеет тот же эффект, что и использование поля OneToOne.

    HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.

courses.Specializations.id: (fields.W342) Установка уникального =True для ForeignKey имеет тот же эффект, что и использование OneToOneField.

Это предупреждение или ошибка возникает, хотя отношение один ко многим!! не один в один

1 ответ

Решение

То, как вы разработали свои модели, это по сути OneToOne отношения, потому что вы установили ForeignKey быть primary_key (это автоматически применяется unique=True).

Вы действительно хотите, чтобы пользователь был primary_key из Categories или же Specializations?

Я думаю, что вы хотите что-то вроде этого:

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

С этим User может иметь много Categories а также SpecializationsЯ также изменил __str__ метод для self.name

Другие вопросы по тегам