【问题标题】:Django save method is overwriting field valuesDjango save 方法正在覆盖字段值
【发布时间】: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_atauto_now_add=True 但您正在传递一个值。如果您在创建模型实例时不传递 created_at 值或更改auto_now_add=True 改用default
  • @dirkgroten 我已经从帖子中删除了它,事实上这并不重要。
  • @MT0 我尝试从模型和创建代码中删除,但没有任何改变。

标签: django database oracle django-models


【解决方案1】:

好的,刚刚找到解决方案: 刚刚将字段名称从 is_valid 更改为 classificacao_valida

我认为问题是由 models.Model 上名为 is_valid 的变量或方法引起的,它最终覆盖了我的类 is_valid 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2019-10-13
    • 2021-11-21
    • 2018-10-12
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多