2016-04-04 25 views
2

olarak kullanıldığında başarısız oluyor Create adı verilen kullanışlı bir işlevle, deneme aşamasında çalıştığım bir dizi fabrika var.Django factoryboy, varsayılan parametre değeri

def Create(project=ProjectFactory()): 
    # do stuff with project 

ben şöyle işlevini sesleniyorum:

Create() # new project will be defined 
Create(existing_project) # existing project will be used 

Ama o değil ben varolan proje başvurmak için gerektiğinde ben FactoryBoy ile yeni bir tane oluşturun değilse, ben, parametre olarak geçmek

E ProgrammingError: relation "auth_user" does not exist 
E LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user... 
E                ^

bazı günler için farklı geçici çözümler denedikten sonra, ben bu versiyon çalıştığını bulundu: 't iş, ben hataların bir grup var

def Create(project=None): 
    project = ProjectFactory() if not project else project 
    # do stuff with project 

Benim için de aynı şey var, burada neyi özlüyorum?

cevap

2

def Create(project=ProjectFactory()):'daki varsayılan argümanın, temel olarak test yürütücüsü başladığında modül yükleme süresinde sınırlandırıldığını unutmayın. Test koşucusu test veritabanını sıfırdan taşıdığı için, bu noktada bir Project oluşturamaz ve kaydedemez. İkinci versiyonda

def Create(project=None): 
    project = ProjectFactory() if not project else project 

böylece yalnızca işlev denir kez idam Project işlevi içinde olduğunu oluşturur ve bir kod olarak

- sonra göçler koştu.

+0

Doğru olarak anlarsam: varsayılan yükleyici değeri, modül çalıştırıldığında ve işlev yürütüldüğünde yüklenmez mi? – nobe4

+0

Bu doğru! – schwobaseggl

+0

Neat, bu konu hakkında bir referans/okuma var mı? Bu yükleme farkından gerçekten habersizdim. – nobe4