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

时间:2016-07-11 08:06:17

标签: django django-forms django-class-based-views

我刚刚开始使用基于类的视图,并且仍然无法预测正确的下拉值的正确方法。

我有一个像这样的简单UpdateView:

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)

虽然这有效并且它也会填充CharFields等,但是下拉菜单未被选中,这使得使用起来非常不舒服。我想要的是当你要编辑它时,已经选择了当前选中的对象字段(UpdateView)。

使用的form只是标准字段ModelForm。字段本身是Foreignkey

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

1 个答案:

答案 0 :(得分:0)

我为我的问题找到了一个可行的解决方案:

课堂内:

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扩展类现在返回我要编辑的表单,并在其下拉列表中选择了正确的值。我不确定这是否是正确/最好的方式。