Django OneToOneField вызывает ошибку IntegrityError в / submissions / submit / NOT NULL, сбой ограничения: submissions_submissiondata.submission_code_id - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь реализовать модель таким образом, чтобы пользователь мог иметь несколько представлений, а отправка имела только один объект типа 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) 

По какой-то причине я получаю следующую ошибку: enter image description here

И ошибка запускается в этих строках: enter image description here

Кто-нибудь знает, что может вызывать эти ошибки?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Я столкнулся с той же проблемой. Была ли у вас пустая база данных, когда вы вносили эти изменения в свою модель?

0 голосов
/ 08 мая 2020

Я решил проблему, вместо submission_data = SubmissionData(..). Я использовал встроенный Django для создания объектов submission_data = SubmissionData.objects.create(...), и после этого он работал нормально.

...