Сбой ограничения NOT NULL для ForeignKey (null = True) - PullRequest
0 голосов
/ 23 января 2020

У меня есть две модели, а именно Applicant и LoanRequest. Всякий раз, когда создается экземпляр Applicant, сигнал отправляется функции, которая выполняет вызов API. Данные вызова вместе с первичным ключом экземпляра, который отправил сигнал, сохраняется как LoanRequest.

Однако при сохранении LoanRequest выдается следующая ошибка:

django.db.utils.IntegrityError: NOT NULL constraint failed: queues_loanrequest.dealer_id_id

Вот мой код:

class Applicant(models.Model):
    app_id = models.CharField(max_length=100)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    email = models.CharField(max_length=100)
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.first_name + " " + self.last_name


class LoanRequest(models.Model):
    loan_request_id = models.CharField(max_length=100)
    app_id = models.ForeignKey(Applicant, on_delete=models.CASCADE)
    FICO_score = models.CharField(max_length=100)
    income_risk_score = models.CharField(max_length=100)
    DTI = models.CharField(max_length=100)
    date_requested = models.DateTimeField(default=timezone.now)
    loan_request_status = models.CharField(max_length=100,blank=True)
    dealer_id = models.ForeignKey(Dealer, on_delete=models.CASCADE,blank=True)

def credit_check(sender, instance, **kwargs):
    credit_json = get_credit(instance.pk) #credit information for applicant
    credit_json = json.loads(credit_json)
    new_request = LoanRequest.objects.create(app_id=instance, FICO_score=credit_json["ficco-score"],
                                income_risk_score=credit_json["income-risk-score"],
                               DTI=credit_json["DTI"])


Очень плохо знаком с Django , был бы очень признателен за помощь!

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Указание blank=True без null=True не очень полезно для ForeignKey.

Используйте это вместо:

dealer_id = models.ForeignKey(Dealer, on_delete=models.CASCADE, blank=True, null=True) 

Это сделает поле необязательным. В противном случае вам придется указывать Dealer каждый раз, когда вы создаете LoanRequest.

0 голосов
/ 23 января 2020

LoanRequest имеет поле

dealer_id = models.ForeignKey(Dealer, on_delete=models.CASCADE,blank=True)

Поскольку dealer_id не имеет null=True, создание экземпляра LoanRequest без предоставления dealer_id вызовет ошибку базы данных, которую вы got.

Вам нужно либо указать dealer_id в экземпляре LoanRequest, который должен быть экземпляром Dealer, либо изменить модель LoanRequest так, чтобы поле dealer_id имеет null=True.

См. комментарий выше: используйте суффикс _id для внешнего ключа модели Django - это почти всегда неверно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...