繁体   English   中英

Django - get_or_create 不工作

[英]Django - get_or_create not working

你能帮我理解为什么这段代码会导致重复条目(IntegrityError)吗?

我在 Django 1.2 上。

(row, is_new) = MyModel.objects.get_or_create(field1=1)
row.other_field = 2
row.save()

我确实对 field1 有一个独特的约束。 如果存在 field1=1 的行,则一切正常,Django 执行“获取”。

如果没有 field1=1 的行,则看起来 Django 正在创建该行,这是可以的。 但是为什么不让我保存呢?

更新:

如果有帮助,这里是 MyModel:

class MyModel(models.Model):
    id = models.BigIntegerField(primary_key=True)
    field1 = models.BigIntegerField(unique=True)
    other_field = models.CharField(max_length=765)
    class Meta:
        db_table = u'project_crosses_suppl_FO'

field1 是另一个表的外键。 但是我没有在 Django 中为该表创建 model ,所以我没有告诉 Django 它是外键。

假设这是您真实代码的相当忠实的表示,毫不奇怪,被破坏的不是 Django,而是您的 model。

您已经用自己的id字段覆盖了自动主键字段,但忽略了使其成为自动增量。 因此数据库没有为 PK 使用新值,因此存在完整性错误。

除非您有非常好的理由,否则您应该让 Django 自己处理 PK 字段。

get_or_create 对我来说听起来很糟糕。 我只是在做这个工作:

rows = MyModel.objects.filter(field1=1)
row = rows[0] if rows else MyModel(field1=1)
row.other_field = 2
row.save()

即使您使用的字段设置为主键或唯一,Get 或 Create 也会返回结果元组。

所以在你的情况下: row 是一个带有一个 object 的元组,因此这应该适合你:

(row, is_new) = MyModel.objects.get_or_create(field1=1)
row[0].other_field = 2
row[0].save()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM