0
現在、このコードは、すべてのループ反復で2〜4回データベース(Postgres)に送られているようです。最初にType
を取得して(作成し)、Component
を取得(作成)します。より少ないデータベースのトリップでこれを行う方法はありますか?Djangoのループで複数のデータベースへの移動を避けるには?
models.py
:
class Component(models.Model):
long = models.TextField()
type = models.SmallForeignKey('Type', models.CASCADE)
class Type(models.Model):
type = models.TextField(unique=True)
class Point(models.Model):
components = models.ArrayField(models.IntegerField(), default=[])
def save_components(self, geocode):
_components = []
for c in geocode:
ct = Type.objects.get_or_create(type=c['types'][0])
_components.append(Component.objects.get_or_create(long=c['long_name'], type=ct).pk)
self.components = _components
self.save()
受信データ:
geocode = [
{
"long_name" : "Luray",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Page County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Virginia",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"types" : [ "country", "political" ]
}
]
OK、 'ct'と 'component'はどこからも出てこない、彼らはデータベースからフェッチされます、あなたはどのようにデータベースにヒットして情報を得ることができますか? –
@ShangWangそれはローカルでキャッシュすることは可能だろうと思いますが、それは問題ではありません。目標は、1または2になる可能性のある旅行の数を減らすことです。私は、すべての情報が最初の旅行が行われた時点で既に存在することを考えれば、可能であると考えます。 – dtgq
なぜManyToManyFieldを使用するのではなく、主キーの配列を格納していますか? –