2013-12-15 21 views
5

Używam klasy django-polymorphic i klasy bazowej z około 8 klas pochodnych. Działa świetnie, z wyjątkiem sytuacji, gdy próbuję utworzyć wiele obiektów naraz, w tym przypadku wydajność jest bardzo niska. Mój kod wygląda następująco:Tworzenie wielu obiektów przy użyciu django-polimorficznego

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() 

Ja również próbowałem przy użyciu Parent.objects.bulk_create, ale to nie działa dobrze z polimorficznych-django, bo to właśnie tworzy obiekt bazowy i nie obiektów podrzędnych. Kiedy próbuję użyć bulk_create każdego z modeli podrzędnych, powstaje ValueError("Can't bulk create an inherited model").

Czy istnieje skuteczniejszy sposób tworzenia wielu polimorficznych obiektów?

Odpowiedz

0

ten został wdrożony w django admin w

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() 

należy OBJ powrót z func jest używany gdzie indziej :) cieszyć

Powiązane problemy