Django ORM - 使用foreignkey关系的UpdateView表单缩写

时间:2012-05-25 14:51:28

标签: django django-models django-forms 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()会返回额外的字段。

所以,问题:在这种情况下构建初始字典有什么好方法吗?

1 个答案:

答案 0 :(得分:0)

在Python中,“nice”通常意味着“简单易读”,所以我会像以下人物一样:

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

但是ModelForm也可能是一个很好的解决方案......

相关问题