创建新模型对象时出现 IntegrityError

IntegrityError when creating a new model object

我遇到错误:

IntegrityError at evaluation/evaluee/new**

Null value in column "Evaluation_data_id" violates not-null constraint**

我认为这与我建立与两个模型的关系的方式有关。

想法是:每次创建一个 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

在您的 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 实例尚未创建)引发相同的错误。