【发布时间】:2020-07-13 06:47:29
【问题描述】:
我有一个 Django 应用程序,我想用 ModelForm 创建一个更新表单,但我必须从 user_profile 模型中获取 fields 参数。所以我创建了我的表单和视图,如下所示。
forms.py;
class UpdateForm(forms.ModelForm):
class Meta:
model = Data
fields = []
def __init__(self, *args, **kwargs):
input_choices = kwargs.pop('input_choices')
super(UpdateForm, self).__init__(*args,**kwargs)
self.fields = input_choices
views.py;
@login_required(login_url = "user:login")
def updateData(request,id):
features = request.user.profile.selected_features
instance = get_object_or_404(Data,id = id)
form = UpdateForm(request.POST or None, input_choices=features, instance=instance)
if form.is_valid():
data = form.save(commit=False)
data.author = request.user
data.save()
return redirect("data:dashboard")
return render(request,"update.html",{"form":form})
但是,我在 return render(request,"update.html",{"form":form}) 行中遇到了 list indices must be integers or slices, not str 错误。 fields 参数有问题,但我找不到任何东西。
如何将 fields 参数从视图传递到 ModelForm?
【问题讨论】:
-
什么是
features,您对input_choices的预期输入是什么?您能否将Data模型添加到您的问题和request.user.profile.selected_features的结果中 -
如您所知,ModelForm 的“字段”通常包含模型中的参数。但是在我的应用程序中,用户在注册时选择了参数。他们可以使用他们想要的东西。所以我的“特征”是我根据用户选择的一些模型参数。
-
这些字段是完全动态的,而不是
Data模型上的字段? -
数据模型上的字段,但不是全部,是的,它必须是动态的。例如;我的数据模型包含:姓名、用户名、电话号码等,但我的用户只选择了用户名参数,因此应该只使用用户名参数创建数据表单。
标签: django django-models django-forms django-views