簡體   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