Создать учебную платформу - связать упражнение со своим уроком - одно поле или внешний ключ? - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь построить небольшой проект - проект электронного обучения. Я пытаюсь привязать некоторые упражнения к его идентификатору урока.

Я прочитал django docs и не знаю, следует ли мне использовать поле 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 и изменив идентификатор после этого? Или я должен перейти к отношениям один на один? Благодарю. Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Если урок состоит из нескольких уроков, тогда подходит ForeignKey. Поле OneToOne - это просто ForeignKey с ограничением unique=True, что означает, что допускается только одна связь между двумя объектами.

Что касается вашей ошибки, у вас есть два варианта:

1) Установите атрибут default=..., который не имеет смысла в этом случае, так как не похоже, что для каждого урока должно быть упражнение «по умолчанию».

2) Установите ForeignKey на blank=True, null=True, затем установите каждый Lesson вручную. Вы всегда можете удалить blank=True, null=True, а затем выполнить миграцию снова.

1 голос
/ 08 апреля 2019

Необходимо указать значение по умолчанию:

 DEFAULT_ID = 1
 idLectie = models.ForeignKey(Lectie, on_delete=models.DO_NOTHING,  default=DEFAULT_ID)

Также убедитесь, что в таблице Другое есть строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...