【发布时间】:2019-09-10 13:55:57
【问题描述】:
我有一个模型在保存操作期间覆盖了字段值,我不知道这是在与数据库通信期间发生的还是纯粹的 Django 问题。
我的错误模型:
class Classificacao(models.Model):
item = models.ForeignKey(Item, verbose_name="Item", db_index=True, on_delete=models.CASCADE, db_column='seq_prod')
is_valid = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
为了识别bug我覆盖了save方法:
def save(self, *args, **kwargs):
print(self.is_valid)
super(Classificacao, self).save(*args, **kwargs)
print(self.is_valid)
当我通过以下代码创建类的实例时,覆盖的“保存”会打印上述内容:
classificacao_nova = Classificacao.objects.create(
item=item,
created_at=datetime.datetime.now()
)
输出:
True
False
显示了以下插入查询的调试模式:
(0.001) QUERY = 'INSERT INTO "CALCULO_CLASSIFICACAO" ("SEQ_PROD", "IS_VALID", "CREATED_AT", "UPDATED_AT") VALUES (:arg4, :arg7, :arg0, :arg2) RETURNING "CALCULO_CLASSIFICACAO"."ID" INTO :arg1' - PARAMS = (1288767006, False, Oracle_datetime(2019, 9, 10, 10, 23, 2, 359822), Oracle_datetime(2019, 9, 10, 10, 23, 2, 359836), '<django.db.backends.oracle.utils.InsertIdVar object at 0x7fb99f578be0>'); args=(1288767006, False, Oracle_datetime(2019, 9, 10, 10, 23, 2, 359822), Oracle_datetime(2019, 9, 10, 10, 23, 2, 359836), <django.db.backends.oracle.utils.InsertIdVar object at 0x7fb99f578be0>)
注意插入中的 False。
有什么想法吗?
PS.:is_valid 列的数据库默认值为 1。
【问题讨论】:
-
这种情况什么时候发生?你说在代码的其他部分输出是True True,那么这是在代码的哪一部分呢?
-
created_at是auto_now_add=True但您正在传递一个值。如果您在创建模型实例时不传递created_at值或更改auto_now_add=True改用default? -
@dirkgroten 我已经从帖子中删除了它,事实上这并不重要。
-
@MT0 我尝试从模型和创建代码中删除,但没有任何改变。
标签: django database oracle django-models