首页 > 解决方案 > 为什么 Django auto_now_add 在插入或更新时失败且不为空

问题描述

我正在尝试实现一个数据仓库。所以django系统会定期查询一个api来更新数据库。我使用客户端 ID 作为主键,这可能是问题,但是当我保存时,我显然希望它创建或更新。

无论我做什么,我都会收到这个错误!

django.db.utils.IntegrityError:“创建”列中的空值违反非空约束

所以最初我的模型是这样的:

class PersonalTaxClient(models.Model):

 created = models.DateTimeField(auto_now_add=True)
 updated = models.DateTimeField(auto_now=True)
 invoice_client = models.ForeignKey(InvoiceClient, blank=True, null=True, on_delete=models.PROTECT)
 client_name = models.CharField(max_length=100)
 email = models.CharField(max_length=100)

然后我尝试了:

class PersonalTaxClient(models.Model):

    created = models.DateTimeField(editable=False)
    updated = models.DateTimeField()
    client_code = models.CharField(max_length=20, primary_key=True) 
    invoice_client = models.ForeignKey(InvoiceClient, blank=True, null=True, on_delete=models.PROTECT)
    client_name = models.CharField(max_length=100)
    email = models.CharField(max_length=100)
#    history = HistoricalRecords()

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        print(timezone.now())
        if not self.client_code:
            self.created = timezone.now()
        self.modified = timezone.now()
        return super(PersonalTaxClient, self).save(*args, **kwargs)

并尝试像这样更新:

>>> from sbsite.models import PersonalTaxClient
>>> p = PersonalTaxClient(client_code="HHH001", client_name="Bob")
>>> p.save()

我犯了同样的错误。我已经阅读了大约 20 个其他 SO 页面,但我没有更聪明........!

标签: djangodjango-models

解决方案


推荐阅读