2012-05-25 96 views
0

考慮這些僞模式:Django的ORM - 更新視圖形式縮寫與外鍵關係

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()會返回額外的字段。

so,問題:在這種情況下構建最初的字典有什麼好方法?

回答

0

在Python中,「好」通常是指「簡單,可讀的」,所以我personnaly GOR類似:

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

但可能的ModelForm是一個很好的解決方案太...