所以我在forms.py中有一个ManageUserForm
- 它正确渲染但它没有从我正在尝试编辑的用户那里提取正确的数据。
在模板中,我有一个正常工作的for循环
{% for tenants in tenants %}
{{ tenants.user }} {{ tenants.type }}
{% endfor %}
此模板呈现UserProfile中的对象列表。它做得恰到好处。我面临的挑战是更新“tenants.type”属性。同样,类型显示正确,但我不知道如何从此模板页面更新它。
#views.py
def manage_users(request):
tenants = UserProfile.objects.all()
form = ManageUserForm(request.POST or None)
if form.is_valid():
update = form.save(commit=False)
update.save()
return render_to_response('manage_users.html', locals(), context_instance=RequestContext(request))
#forms.py
class ManageUserForm(forms.ModelForm):
class Meta:
model = UserProfile
exclude = ('full_name', 'user',)
`我想我需要调用一个实例,但我不知道如何为非请求用户这样做,并且仍然遵循模板的模式。该模板基本上是一个用户列表,其中请求用户(员工用户)将能够更改列表中的数据。
感谢您的帮助!
答案 0 :(得分:1)
您有一个表单供一个用户使用。如果要使用该表单编辑多个租户,则需要FormSet。编辑对象并显示它们是完全不同的野兽;不要混淆他们。
formset = modelformset_factory(form=ManageUserForm, queryset=tenants)
更新:
您应该在一个{{ form.management_form }}
标记中有一个{% for form in formset %}{{ form }}{% endfor %}
和<form>
的其余部分。您的所有表单都是formset中的第一个表单。
您应该重写模板循环以迭代formset表单而不是租户对象。可以通过{{ form.instance }}
更新2:
您有一个额外的表单,因为您可能尚未将extra=0
参数传递给modelformset_factory
函数。这些表单通常用于添加/编辑数据;因此它支持添加N个空白表单以进行创建。