【问题标题】:Creating many objects using django-polymorphic使用 django-polymorphic 创建许多对象
【发布时间】:2014-01-02 19:12:53
【问题描述】:

我正在使用django-polymorphic 并且有一个包含大约 8 个派生类的基类。它工作得很好,除非我尝试一次创建许多对象,在这种情况下性能很差。我的代码如下所示:

class Parent(PolymorphicModel):
  ...
class DerivedA(Parent):
  ...
class DerivedB(Parent):
  ...

@transaction.commit_on_success
def create_objects()
  for model_class in (DerivedA, DerivedB...):
    instance = model_class(...)
    instance.save()

我也尝试过使用Parent.objects.bulk_create,但这不适用于polymorphic-django,因为它只创建基础对象而不是子对象。当我尝试使用每个子模型的bulk_create 时,它会引发ValueError("Can't bulk create an inherited model")

有没有更有效的方法来创建许多多态对象?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    这是在 django admin 中实现的

    models.py
    
    class BuildScript(models.Model):
       fields ...bla bla
    
    class POLY_BuildScript(BuildScript):
        class Meta:
            verbose_name = "POLY"
        fields...bla bla
    
    admin.py
    
    #just after the imports (func stands alone)
    def save_with_parent_fields(obj):
        obj.build = obj.pbuild
        obj.branch = obj.pbranch
        return obj
    
    class BuildScriptAdmin(admin.ModelAdmin):
    
        def save_model(self, request, obj, form, change):
            obj.executer = request.user.userprofile
            obj.save()
    
    class POLY_BuildScriptAdmin(BuildScriptAdmin):    
        def save_model(self, request, obj, form, change):
            save_with_parent_fields(obj)
            obj.executer = request.user.userprofile
            obj.save()
    

    func 的返回 obj 在其他地方使用 :) 享受

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多