Django UpdateView:将下拉列表设置为选定值

Django UpdateView:将下拉列表设置为选定值,django,django-forms,django-class-based-views,Django,Django Forms,Django Class Based Views,我最近刚开始使用基于类的视图,但仍然不知道预选正确下拉列表值的正确方法是什么 我有一个简单的更新视图,如下所示: class SomeUpdate(PermissionRequiredMixin, UpdateView): model = SomeModel form_class = SomeCreateForm permission_required = 'app.some_model' template_name_suffix = '_update_form'

我最近刚开始使用基于类的视图,但仍然不知道预选正确下拉列表值的正确方法是什么

我有一个简单的更新视图,如下所示:

class SomeUpdate(PermissionRequiredMixin, UpdateView):
    model = SomeModel
    form_class = SomeCreateForm
    permission_required = 'app.some_model'
    template_name_suffix = '_update_form'
    raise_exception = True

    def form_valid(self, form):
        from_page = self.request.GET.get('from')
        if from_page:
            self.success_url = self.request.GET.get('from')
        else:
            self.success_url = "/somewhere/"
        return super(SomeUpdate, self).form_valid(form)
虽然这样做有效,而且它也会填充
字符域
等,但下拉列表保持未选中状态,使用起来非常不舒服。我想要的是,当您要编辑对象时,该对象的当前选定字段已经被选中(UpdateView)

使用的
表单
只是一个标准的
模型表单
,定义了字段。该字段本身是一个
外键


我尝试使用
get_initial(self)
等设置下拉列表值,但没有成功。

我找到了解决问题的有效方法:

课堂内:

def get_initial(self):
    initial = super(MyObjectUpdate, self).get_initial()
    try:
        field1 = self.get_object().field1
        field2 = self.get_object().field2
    except:
        pass
    else:
        initial['field1'] = field1.pk
        initial['field2'] = field2.pk
    return initial

这修复了我的问题,UpdateView扩展类现在返回我的待编辑表单,并在其下拉列表中选择正确的值。我不确定这是否是正确/最好的方法。

如果您正在使用模型实例(UpdateView就是这样做的),那么应该已经为您填写了给定模型的正确下拉列表值。您正在显示的实例是否为给定的外键设置了有效值?是的,它应该是正确的。我只是再次检查,我可以通过它访问选定的foreignkey。UpdateView和通过管理面板执行都不会抛出任何错误。但他们两个都没有保持选中状态。另一方面,许多字段正确地显示了关系。什么是MyObjectUpdate?在Python 3的super()中不需要包含类和self<代码>超级()。获取首字母()将起作用。