IntegrityError Нулевое ограничение - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть три модели в моем приложении django ... модель members, модель application и модель applications review.

Моя модель членов выглядит следующим образом ...

class Members(models.Model):
    TITLES = (
        ('chairman', 'Chairman'),
        ('secretary', 'Secretary')
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=10, choices=TITLES, default='secretary')

Модель моих приложений ...

class Application(models.Model):
   firstname = models.CharField(max_length=20)
   middlename = models.CharField(max_length=20)
   lastname = models.CharField(max_length=20)
   dob = DateField()

Модель обзора приложений ...

class ApplicationsReview(models.Model):
    APPLICATION_STATUS = (
        ('pending', 'Pending Review'),
        ('approved', 'Approved'),
        ('rejected', 'Rejected')
    )
    applicant = models.OneToOneField(Application, on_delete=models.CASCADE, primary_key=True)
    chairman = models.ForeignKey(Members, related_name='chairs', on_delete=models.CASCADE)
    secretary = models.ForeignKey(Members, related_name='secretaries', on_delete=models.CASCADE)
    application_status = models.CharField(max_length=10, choices=APPLICATION_STATUS, default='pending')
    status_justification = models.TextField()
    date = models.DateTimeField(auto_now_add=True)

Когда приложение создается, я хотел бы, чтобы его обзор создавался какхорошо, следовательно, у меня есть следующий сигнал прямо под моделью обзора приложений ...

# When an application is created, create with it an application review and associate it with the application instance

@receiver(post_save, sender=Application)
def create_application_review(sender, **kwargs):
    instance = kwargs['instance']
    created = kwargs['created']
    if created:
        ApplicationReview.objects.create(applicant=instance)

Однако, когда я пытаюсь добавить приложение в администраторе django, я получаю ошибку

null value in column "chairman_id" violates not-null constraint
DETAIL:  Failing row contains (3, pending, 2019-02-08 03:26:04.643452+00, null, null).

Ошибка, по-видимому, является результатом сигнала, пытающегося создать экземпляр ApplicationsReview без предоставления значений для председателя и секретаря.Даже установка их для пустых полей не избавляет от ошибки.Есть что-то, чего я здесь не хватает?

1 Ответ

0 голосов
/ 08 февраля 2019

Создание ApplicationsReview требует, чтобы вы передали следующие детали - chairman, secretary, status_justification Но при создании ApplicationReview в сигнале вы просто передаете значение applicant, поэтому Django принимает значения полей chairman, secretary, status_justification как Nullвот почему вы получаете эту ошибку.

Если вы хотите сделать это поле необязательным, вы можете передать null=True, Blank=True при определении поля в модели.

Примерно так:

chairman = models.ForeignKey(Members, null=True, blank=True, related_name='chairs', on_delete=models.CASCADE)

# End

Вы можете обратиться к этому ответу, чтобы лучше понять, когда использовать null=True, blank=True или оба.https://stackoverflow.com/a/8609425/6280433

...