0

Personモデル、モデルDemographic、およびPersonDemographic両方のモデルのデータを使用した詳細なメソッドを含むモデルがあり、特定の個人人口統計インスタンスのフィールドとして非常に高価な計算を保存します。PersonDemographicモデルへのエントリを容易にするために一括作成を使用するにはどうすればよいですか?

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

1 に答える 1

2

次のように実行できます。

demographic = Demographic.objects.get(id=7)
PersonDemographic.objects.bulk_create(
    [PersonDemographic(person=person, demographic=demographic) for person in Person.objects.some_query_set()]
)
于 2013-09-11T04:35:50.333 に答える