【问题标题】:Django OneToOneField is causing IntegrityError at /submissions/submit/ NOT NULL constraint failed: submissions_submissiondata.submission_code_idDjango OneToOneField 在 /submissions/submit/ NOT NULL 约束处​​导致 IntegrityError 失败:submissions_submissiondata.submission_code_id
【发布时间】:2020-05-07 00:23:40
【问题描述】:

我正在尝试以这样一种方式实现一个模型,即一个用户可以有多个提交,而一个提交只有一个 SubmissionData 类型的对象。

在模板上,用户将上传一个 PDF 文件,该 PDF 将被解析,与该提交相关的一些信息将存储在 SubmissionData 中,文件和一些主要信息将与 SubmissionData 相关联

这里是 models.py

class Submission(models.Model):

    submission_user = models.ForeignKey('auth.User',
                                        related_name='submissions',
                                        on_delete=models.CASCADE)

    submission_file = models.FileField(upload_to='media/')

    created_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        user_submission = str(self.submission_user.username).lower()
        user_submission = user_submission + '/' + str(timezone.now())
        return user_submission

    class Meta:
        ordering = ['-created_at']


class SubmissionData(models.Model):

    submission_code = models.OneToOneField(Submission,
                                           related_name='data',
                                           on_delete=models.CASCADE)

    uuid = models.CharField(max_length=250, null=True)

    patiente_name = models.CharField(max_length=250, null=True)

    patiente_age = models.PositiveIntegerField(null=True)

    patient_gender = models.CharField(max_length=20, null=True)

在我的 views.py 上:

class SubmissionCreateView(CreateView, LoginRequiredMixin):

    form_class = SubmissionForm
    template_name = 'submissions/submission_create.html'
    success_url = reverse_lazy('submissions:list')

    def proccess_submission_data(self):
       parser = PDFParser('path-to-pdf').parse()
       data_obj = parser.get_result()
       submission_data = self.enconde(data_obj)

       self.object.save()
       submission_data.save()

    def enconde(self, data_obj):
        submission_data = SubmissionData(submission_code=self.object,
                                         uuid=data_obj.uuid,
                                         patiente_name=data_obj.patiente_name,
                                         patiente_age=data_obj.patiente_age,
                                         patient_gender=data_obj.patient_gender)
        return submission_data

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.submission_user = self.request.user
        self.proccess_submission_data()
        return super().form_valid(form) 

由于某种原因,我收到以下错误:

并且在这些行上触发了错误:

有谁知道导致这些错误的原因是什么?

【问题讨论】:

    标签: python django django-models django-views one-to-one


    【解决方案1】:

    我也遇到过同样的问题。当您对模型进行这些更改时,您是否有一个空数据库?

    【讨论】:

    • 是的,我有空数据库!我已经解决了问题!
    【解决方案2】:

    我已经解决了这个问题,安装了submission_data = SubmissionData(..)。我已经使用内置的 Django 来创建对象submission_data = SubmissionData.objects.create(...),之后它工作正常。

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2023-03-29
      • 1970-01-01
      • 2020-06-28
      • 2019-02-14
      相关资源
      最近更新 更多