2012-05-25 2 views
0

Рассмотрим эти модели псевдо:Django ORM - UpdateView форма инициалов с ForeignKey отношений

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 мне руки, но при вызове значений() в этом запросе doenst возвращают дополнительные поля.

так, вопрос: Какой хороший способ построить исходный dict в этом случае?

ответ

0

В Python, «хорошо» обычно означает «простой и читаемым», так что я бы personnaly Gor что-то вроде:

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

но ModelForm может быть хорошим решением тоже ...

Смежные вопросы