#python #django #model #null
#python #django #Модель #null
Вопрос:
Я получаю сообщение об ошибке:
Ошибка целостности при оценке / оценке / создании**
Нулевое значение в столбце «Evaluation_data_id» нарушает ограничение not-null**
Я думаю, это связано с тем, как я настраиваю отношения с двумя моделями.
Идея такова: каждый раз, когда создается одна EvaluationModel, также должен создаваться объект EvaluatorModel (получая некоторые значения, такие как evaluee и evaluator) из первой модели.
Я создал поле evaluation_data, чтобы я мог получить доступ к EvaluationModel
Моя модель:
class EvaluationModel(models.Model):
evaluee = models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
related_name= ' ',
verbose_name='Evaluee',
)
evaluator = models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
related_name= ' ',
verbose_name='Evaluator',
)
dgl = models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
related_name= ' ',
verbose_name='DGL',
)
# (...)
def save(self,*args,**kwargs):
created = not self.pk
super().save(*args,**kwargs)
if created:
EvaluatorModel.objects.create(evaluee = self.evaluee, evaluator = self.evaluator, dgl = self.dgl, currentrole = self.currentrole,tenure = self.tenure)
class EvaluatorModel(models.Model):
#evaluator
evaluee = models.CharField(null = True, blank = True, max_length=50)
evaluator = models.CharField(null = True, blank = True, max_length=50)
evaluation_data = models.OneToOneField(
EvaluationModel,
on_delete=models.CASCADE,
primary_key= True,
related_name="evaluationdata",
default = "",
db_constraint=False,
)
def __str__(self):
return self.evaluee '-' self.evaluator
Комментарии:
1. Это означает, что вы не указали значение для
evaluation_data
.
Ответ №1:
В вашем save
методе выполняется следующий вызов:
EvaluatorModel.objects.create(evaluee = self.evaluee,
evaluator = self.evaluator,
dgl = self.dgl,
currentrole = self.currentrole,
tenure = self.tenure)
но не указывает значение для evaluation_data
. Добавить
evaluation_data = self
вместе с аргументами для исправления этого.
Если evaluation_data
это не требуется, вы также можете добавить null=True
к его определению и и избежать того, чтобы объекты, созданные из других мест (где у вас все еще может не быть созданного EvaluationModel
экземпляра), вызывали ту же ошибку.