Я не могу создать поле OneToOneField и поле ForeignKey в модели User?

У меня есть эти две модели

class TaskModel(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE,primary_key=True)
    name=models.CharField(max_length=100)
    start=models.DateField()
    end=models.DateField()
    note=models.CharField(max_length=300)


class ProfileModel(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE,
    primary_key=True)
    img=models.ImageField(upload_to='profileimg',blank=True)
    desc=models.TextField(max_length=500)
    occupation=models.CharField(max_length=100)
    martial=models.CharField(max_length=50)

но когда я выполняю команду makemigrations, она показывает мне эту ошибку::

eg:- app.TaskModel.users: (fields.W342) Установка unique=True в ForeignKey имеет тот же эффект, что и использование поля OneToOneField. эффект, как и при использовании поля OneToOneField. СОВЕТ: ForeignKey(unique=True) обычно лучше обслуживается полем OneToOneField.

Вот моя проблема, я сделал TaskModel как ForeignKey, но он работает как OneToOne Filed. Я новичок в django, пожалуйста, помогите мне?

Это не ошибка, это предупреждение. Уникальные ForeignKey - это, по сути, то, чем является OneToOneField. primary_key=True подразумевает unique=True, следовательно, поле user вашего TaskModel лучше превратить в OneToOneField:

from django.conf import settings

class TaskModel(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        primary_key=True
    )
    name = models.CharField(max_length=100)
    start = models.DateField()
    end = models.DateField()
    note = models.CharField(max_length=300)

Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .


Примечание: Модели обычно не имеют суффикса Model. Поэтому лучше переименовать TaskModel в Task.

Вернуться на верх