Ошибка целостности при создании нового объекта модели

#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 экземпляра), вызывали ту же ошибку.