2013-12-15 11 views
5

Sto usando django-polymorphic e ho una classe base con circa 8 classi derivate. Funziona benissimo tranne quando cerco di creare molti oggetti contemporaneamente, in questo caso la performance è molto scarsa. Il mio codice è simile al seguente:Creazione di molti oggetti utilizzando django-polimorfico

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

Ho anche provato ad utilizzare Parent.objects.bulk_create, ma questo non funziona bene con polimorfica-Django, perché crea solo l'oggetto di base e non gli oggetti figlio. Quando provo a utilizzare bulk_create di ciascun modello figlio, viene generato il numero ValueError("Can't bulk create an inherited model").

Esiste un modo più efficiente di creare molti oggetti polimorfici?

risposta

0

Questa è stata implementata in 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() 

l'obj ritorno da func viene utilizzato altrove :) godono

Problemi correlati