【问题标题】:saving data in Bulk using Django使用 Django 批量保存数据
【发布时间】:2010-01-07 09:47:23
【问题描述】:

我有对象 A 女巫与对象 b 有多对多的关系。 是否可以批量保存对象 A 和它的 B 集合'我的意思是不要一个接一个地保存 B 对象然后将它们添加到 A.

for b in b_objects :
    A.b_objs.add(b)

A.save()

谢谢

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可以将模型转储为 json(来自 http://www.djangosnippets.org/snippets/125/):

    import sys, os
    
    sys.path.append('/Path/To/Django/Projects/')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
    
    from django.core.serializers import serialize
    from myproject.myapp import models
    
    model_names = [] # a list of the names of the models you want to export
    
    for model_name in model_names:
        cls = getattr(models, model_name)
        filename = model_name.lower() + ".json"
        file = open(filename, "w")
        file.write(serialize("json", cls.objects.all()))
    

    【讨论】:

      【解决方案2】:

      我不这么认为。 ManyToMany 关系是通过一个包含 (id, a_id, b_id) 元组的中间表实现的。因此A must pre-exist(参见“示例API 用法”)和每个B 必须有一个id,然后才能创建中间行。我查看了django.db.models.fields.related 中的源代码,虽然create_many_related_manager 有一个名为_add_items() 的方法,但似乎假设所有添加的B 项都已经有id 字段,这意味着它们必须事先保存。

      我找不到任何可以允许使用 A.add(bunch_of_Bs_that_havent_been_saved_yet) 的内容。上面提到的例子确实显示add()在一个镜头中有多个B,但它们都在add()发生之前被保存了。对不起。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        相关资源
        最近更新 更多