Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ForeignKey的NOT NULL约束失败(NULL=True)_Python_Django_Database_Model_Foreign Keys - Fatal编程技术网

Python ForeignKey的NOT NULL约束失败(NULL=True)

Python ForeignKey的NOT NULL约束失败(NULL=True),python,django,database,model,foreign-keys,Python,Django,Database,Model,Foreign Keys,我有两种模式,即申请人和贷款申请。每当创建申请人实例时,就会向进行API调用的函数发送一个信号。来自调用的数据以及发送信号的实例的主键将保存为LoanRequest 但是,当我保存贷款请求时,会出现以下错误: django.db.utils.IntegrityError: NOT NULL constraint failed: queues_loanrequest.dealer_id_id 这是我的密码: class Applicant(models.Model): app_id =

我有两种模式,即
申请人
贷款申请
。每当创建
申请人
实例时,就会向进行API调用的函数发送一个信号。来自调用的数据以及发送信号的实例的主键将保存为
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,将非常感谢帮助

LoanRequest
有一个字段

dealer_id = models.ForeignKey(Dealer, on_delete=models.CASCADE,blank=True)
由于
dealer\u id
没有
null=True
,因此在不提供
dealer\u id
的情况下创建
LoanRequest
实例将引发数据库错误

您需要在
LoanRequest
的实例化中提供
dealer\u id
,它应该是
dealer
实例,或者更改
LoanRequest
模型,以便
dealer\u id
字段具有
null=True


请参阅上面的评论:在Django型号外键上使用后缀
\u id
,这样做几乎总是不正确的。

指定
blank=True
而不指定
null=True
对于外键不是很有用

改用这个:

dealer\u id=models.ForeignKey(dealer,on\u delete=models.CASCADE,blank=True,null=True)

这将使该字段成为可选字段。否则,每次创建
贷款请求时,您都必须指定
经销商

,很抱歉,这与问题无关,但在外键字段名称中使用
\u id
是多余的,实际上是不正确的。访问该属性时,django models将返回被引用的实际对象,而不仅仅是它的id。django自动创建的数据库列将附加
\u id
,正如您在错误消息中的
\u id\u id
中所看到的那样,您需要在创建函数中传递dealer\u id\u id,该值将是经销商申请者的id。如果您正在使用现有数据库并迁移到Django,则可以为字段使用
db_column
选项参数,使实际SQL列名与Django字段名不同。否则,您可能不想在外键字段后面加上
\u id
,因为您最终会得到两个属性
myfield\u id
myfield\u id\u id
,前者返回一个实例,后者实际包含id值,这可能会让人困惑。我不小心在问题标题中加了
null=True
,这是一种误导,因为它是解决方案,
ForeignKey(null=True)
不会导致此问题。如果有人能纠正这一点,我将不胜感激。非常感谢。