0

次の疑似モデルを検討してください。

class City(models.Model):
    name = models.CharField()
    region = models.ForeignKey(Region)

class Region(models.Model):
    name = models.CharField()
    country = models.ForeignKey(Country)

class Country(models.Model):
    name = models.CharField()

そして、このようなフォーム:

class MyForm(forms.Form):
    city = forms.CharField()
    region = forms.CharField()
    country = models.CharField()

UpdateView に現在の値を表示させたいので、次のようにイニシャルを設定しました。

model_initial = City.objects.filter(id=self.object.id).values()[0]

form = MyForm(initial=model_initial)

self.object が既に利用可能であるため、これはちょっとばかげているので、値のマッピングを手動で行うことができます

とにかく、これは機能しますが、関係はキャプチャされないため、次のことができます。

model_initial = City.objects.filter(id=self.object.id).values()[0]
model_initial.update({'region':Somequery, 'country':Somequery})

form = MyForm(initial=model_initial)

しかし、それはかなり厄介で、おそらく不要です。select_related が私に与えるものを確認しようとしましたが、そのクエリで values() を呼び出すと余分なフィールドが返されません。

質問: この場合、最初の dict を作成する良い方法は何ですか?

4

1 に答える 1

0

Python では、「素敵」は通常「シンプルで読みやすい」という意味なので、個人的には次のようなものを gor します。

city =  self.object
initial = dict(
  name=city.name, 
  region=city.region.name, 
  country=city.region.country.name
  )

しかし、ModelFormも良い解決策かもしれません...

于 2012-05-25T15:28:01.023 に答える