2012-05-25 3 views
0

이 의사 모델 고려 :장고 ORM - 외래 키 관계 UpdateView 양식 이니셜

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) 

자기가 이미 사용 가능하기 때문에 다소 어리 석습니다 값 매핑을 할 수있는 수동으로 이미

어쨌든,이 작동하지만 관계가 캡처되지 않습니다, 그래서 내가 할 수있는 :

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가 나에게 무슨 일이 일어 났는지보고자했지만 그 쿼리에 값()을 호출하면 여분의 필드가 리턴된다.

그래서, 질문 :이 경우에 초기 사전을 구성하는 좋은 방법은 무엇입니까? 파이썬에서

답변

0

은 "좋은"는 보통 "간단하고 읽기"를 의미한다, 그래서 내가 좋아하는 뭔가를 PERSONNALY 뜨거운 좋겠 :

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

하지만 ModelForm은 ... 너무 좋은 해결책이 될 수