Django - 当主键已经存在时,使用 excel 文件更新数据库会导致错误

Django - updating database with an excel file is causing an error when primary key already exists

我的模型中的注释 contact_email 是我的联系人模型的主键

我有一个 html 页面和表单,用户可以在其中上传 excel 文件以将他们的联系人上传到数据库。如果 contact_email 以前没有上传过,一切正常,联系人被上传。

但是,如果 contact_email 已经存在,则会引发错误并且联系人的信息不会更新,例如,如果在新的 excel 文件中现有联系人的 fav_sport 已更改,它将不更新了。

给出的错误是 /upload/ 处的 IntegrityError 重复键值违反唯一约束 "contacts_contact_pkey" 详细信息:密钥 (contact_email)=(john@gmail.com) 已经存在。

这是导致错误的代码:

for index, row in df.iterrows():
    created = Contact.objects.update_or_create(
        contact_name = row[0],
        fav_sport = row[1],
        contact_email = row[2],
    )

如何修改此代码以解决此错误?

The defaults is a dictionary of (field, value) pairs used to update the object.

试试这个,如果有效请告诉我:

for index, row in df.iterrows():
    defaults = {
        "contact_name": row[0],
        "fav_sport": row[1],
        "contact_email": row[2],
    }
    obj, created = Contact.objects.update_or_create(**defaults, defaults=defaults)

您正在使用 update_or_create 中的所有字段进行唯一性查询,就像在文档

中一样

(假设您想按 contact_email 更新)

for index, row in df.iterrows():
    created = Contact.objects.update_or_create(
        contact_email= row[2],
        defaults = {
            "contact_name": row[0],
            "fav_sport": row[1]
        }
    )