Я пытаюсь создать небольшой проект - проект электронного обучения. Я пытаюсь связать некоторые упражнения с идентификатором урока.
Я прочитал документы django и не знаю, следует ли мне использовать поле OneToOne или внешний ключ.
Я попробовал эту идею с внешним ключом, так как считаю, что это правильный ответ. уроки - models.py (Lectie = урок)
from django.db import models
# Create your models here.
class Lectie(models.Model):
YTLink = models.CharField(max_length = 100)
PDFLink = models.CharField(max_length = 100)
упражнения - models.py (intrebare = вопрос, variante = варианты, variantaCorecta = правильный ответ)
from django.db import models
from django.contrib.postgres.fields import ArrayField
from lectii.models import Lectie
# Create your models here.
class Exercises(models.Model):
idLectie = models.ForeignKey(Lectie, on_delete=models.DO_NOTHING)
intrebare = models.CharField(max_length = 300)
variante = ArrayField(models.CharField(max_length=300), null=True)
variantaCorecta = models.IntegerField()
def __str__(self):
return self.intrebare
Я получаю эту ошибку:
You are trying to add a non-nullable field 'idLectie' to exercises without a default; we can't do that (the database needs something to populate existing rows).
Я добавлю эти вопросы только из бэкенда, они не будут добавлены пользователем, и я получаю этот ответ. Джанго не знает, к какому идентификатору привязать упражнение.
Так как же должна выглядеть моя модель, чтобы я мог привязать упражнение к уроку? Можно ли таким образом просто добавить пустое значение = True и после этого изменить идентификатор? Или мне стоит переключиться на отношения один на один? Спасибо. Спасибо.






Вам необходимо указать значение по умолчанию:
DEFAULT_ID = 1
idLectie = models.ForeignKey(Lectie, on_delete=models.DO_NOTHING, default=DEFAULT_ID)
Также убедитесь, что в таблице есть строка Other.
@OctavianNiculescu, надеюсь, у тебя есть решение
Если в уроке несколько уроков, то подходит ForeignKey. Поле OneToOne — это просто ForeignKey с ограничением unique=True, что означает, что допускается только одна связь между двумя объектами.
Что касается вашей ошибки, у вас есть два варианта:
1) Установите атрибут default=..., что в данном случае не имело бы смысла, поскольку кажется, что для каждого урока не должно быть упражнения «по умолчанию».
2) Установите для параметра ForeignKey значение blank=True, null=True, затем установите каждый Lesson вручную. Вы всегда можете удалить blank=True, null=True, а затем снова выполнить миграцию.
Спасибо за ответ на обе мои проблемы. Теперь я понимаю, что происходит.
Большое спасибо, я принял другой ответ, потому что он был более полным.