更新Django模板和视图中的非请求用户信息

时间:2012-09-15 21:07:45

标签: django django-templates django-views

所以我在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',)

`我想我需要调用一个实例,但我不知道如何为非请求用户这样做,并且仍然遵循模板的模式。该模板基本上是一个用户列表,其中请求用户(员工用户)将能够更改列表中的数据。

感谢您的帮助!

1 个答案:

答案 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个空白表单以进行创建。