【问题标题】:Django ORM - UpdateView form initials with foreignkey relationshipsDjango ORM - 具有外键关系的 UpdateView 表单首字母
【发布时间】:2012-06-01 03:57:07
【问题描述】:

考虑这些伪模型:

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() 并不会返回额外的字段。

所以,问题:在这种情况下构造初始字典的好方法是什么?

【问题讨论】:

    标签: django django-models django-forms django-orm


    【解决方案1】:

    在 Python 中,“nice”通常意味着“简单易读”,所以我个人认为是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 2018-02-24
      • 2017-01-10
      • 1970-01-01
      • 2018-11-05
      • 2014-11-27
      • 2018-05-10
      • 2018-08-26
      • 2020-10-22
      相关资源
      最近更新 更多