2013-09-11 30 views
0

我有一個Person模型,Demographic模型,其中包含利用兩個模型數據的詳細方法PersonDemographic模型的模型,並保存一些非常昂貴的計算,對具體的人 - 人口場實例。如何使用批量創建來方便輸入我的PersonDemographic模型?Django的批量創建多個必填字段

class Person(models.Model): 
    name = models.CharField(max_length=254) 
    details = a bunch of fields ... 

class Demographic(models.Model): 
    name = models.CharField(max_length=254) 
    details = a bunch of fields ... 

class PersonDemographic(models.Model): 
    person = models.ForeignKey(Person) 
    demographic = models.ForeignKey(Demographic) 
    expense_calc_property = models.FloatField(null=True) 

    @property 
    def random_property(self): 
     calc using person/demographic details 

    @property 
    def expense_calc(self): 
     if not expensive_calc_property: 
      self.expensive_calc_property = results from expensive calc 
      self.save() 
     return self.expensive_calc_property    

那麼,如何使用PersonDemographic.objects.bulk_create([])爲大型查詢集,如Person.object.some_query_set()用單一的人口實例匹配起來,說demographic = Demographic.objects.get(id=7)?換句話說,一些它取代:

demographic = Demographic.objects.get(id=7) 
for person in Person.objects.some_query_set(): 
    pg = PersonDemographic.objects.create(person=person, demographic=demographic) 
    pg.save() 

回答

1

你可以這樣說:

demographic = Demographic.objects.get(id=7) 
PersonDemographic.objects.bulk_create(
    [PersonDemographic(person=person, demographic=demographic) for person in Person.objects.some_query_set()] 
)