django - 在 Django 中批量创建具有多对多关系的对象

标签 django bulkinsert django-orm

我有 Contacts 和 ContactsGroup 两个模型

联系人包含群组作为 m2m 关系

class ContactGroup(models.Model):
    contact_group   = models.ManyToManyField(ContactGroup, null=True, related_name="contact_list")

联系人是另一种模型

我想创建批量创建联系人,其中 contact_group 也添加到模型上。

group_list = []

if group:
   groups = [item.strip() for item in group.split(',')]
   for item in groups:
     try:
        group, created = ContactGroup.objects.get_or_create(account=account, name=item)
        group_list.append(group)
     except :
        pass
contact = Contacts(
         name = name,
         phone = change_phone_format(phone),
         email = email,
         address = address,
         company = company,
         website = website,
         notes = notes,
         dob = dob,
         account = account
                )
bulk_obj.append(contact)
bulk_group.append(group_list)

ThroughModel = Contacts.contact_group.through

now_date = datetime.datetime.now()
Contacts.objects.bulk_create(bulk_obj)
contacts = Contacts.objects.filter(created_on__gte=now_date)
bulk_through = []
for i, item in enumerate(contacts):
    for gr in bulk_group[i]:
       if item and gr:
          bulk_through.append(ThroughModel(contactgroup_id=item.pk, contacts_id=gr.pk))
ThroughModel.objects.bulk_create(bulk_through)

但显示错误

IntegrityError at /contact-manager/contacts/process/goIKlkpymfWCaFeiQXwp/

(1452, 'Cannot add or update a child row: a foreign key constraint fails (`sparrow`.`contactmanager_contacts_contact_group`, CONSTRAINT `D3781be41803f836ec292e41ed99c16a` FOREIGN KEY (`contactgroup_id`) REFERENCES `contactmanager_contactgroup` (`id`))')

有什么解决办法吗?

最佳答案

也许这会有所帮助,请将最后一行更改为:

bulk_through.append(ThroughModel(contactgroup_id=gr.pk, contacts_id=item.pk))

在我看来,变量是混合的。

关于django - 在 Django 中批量创建具有多对多关系的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27896662/

相关文章:

java - 从 Informix 批量导入到 Oracle

sql - 批量插入 csv 麻烦

sql - 批量插入 Postgres 的最快方法是什么?

Django 通过单个查询对注释百分比进行分组

python - 自动填充字段不适用于表单

python - 如何使用按钮指向现有的 url

python - 从另一个模型获取值列表

python - 我如何从 django 中的 forms.ModelChoiceField 获取值?

django - Django order_by特定顺序

database - Django "bulk_save"和 "bulk_update"