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<代码>超级()。获取首字母()将起作用。