【问题标题】:Django - bulk_create objects with order_with_respect_to attributeDjango - bulk_create 具有 order_with_respect_to 属性的对象
【发布时间】:2015-11-17 20:59:30
【问题描述】:

您好,我有模型对象列表:my_objects,应该保存在数据库中。 此模型在其 Meta 类中具有 order_with_respect_to 属性。

当我尝试bulk_create 这个列表时,我得到了:

bulk_create 期间“_order”列中的空值违反非空约束”

当我只是迭代元素并在每个元素上调用 save() 时。一切都很好,但是这样的顺序数据库访问并不能满足我……

我尝试调用signals.pre_save.send 函数,但这并没有改变情况。

当我在来自my_objects 的每个signle 元素上调用_save_table 时,这有效,但_save_tablesave() 方法中最重的部分,所以我一无所获...

是否有可能只用一个数据库连接保存一批 django 对象?

我正在使用postgresql

【问题讨论】:

  • 我在谈论同一个问题。你找到解决办法了吗?

标签: python django postgresql django-models django-orm


【解决方案1】:

来自文档: https://docs.djangoproject.com/en/1.8/ref/models/querysets/#bulk-create

如果模型的主键是 AutoField,它不会像 save() 那样检索和设置主键属性。

我猜你的 id 是自动递增的,现在它没有被保存,它被 _order 引用。

【讨论】:

    【解决方案2】:

    它只是一个字段,您可以手动设置“_order”或在 bulk_create 之前计算。

    # Model
    class Product(models.Model):
        name = models.CharField(max_length=255)
    
    # Bulk create example
    # Data
    product_data_list = [{"name": "Apple"}, {"name": "Potato"}]
    
    # Add "_order" field for each product
    for index, product_data in enumerate(product_data_list):
        product_data["_order"] = index
    
    # Create
    Product.objects.bulk_create(Product(**product_data) for product_data in product_data_list)
    

    【讨论】:

      猜你喜欢
      • 2016-02-12
      • 2012-06-03
      • 2012-06-03
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2020-02-11
      相关资源
      最近更新 更多