【发布时间】:2011-07-19 01:51:20
【问题描述】:
我正在尝试做一些我认为很常见的事情,但我真的不确定如何解决这个问题。
我目前的工作:目前我在我的表单上生成一个复选框列表(使用“CheckboxSelectMultiple”),它会自动勾选所有用户列表中“成员”中的所有用户在 django 中(由“queryset=User.objects.all()”产生)。
我真正想做的事情:我不想列出 Django 中的每个用户,我只想在“成员”中显示用户列表。
我认为如何做到这一点:我认为我可以通过将查询集修改为类似于“project.members.all()”的方式来做到这一点,其中 project = Project(项目)。但是如何将此上下文传递给我的表单?
# models.py
class Project(models.Model):
name = models.CharField(max_length=100)
members = models.ManyToManyField(User, related_name="members", blank=True, null=True)
# forms.py
class ProjectSettings(forms.Form):
summary = forms.CharField(max_length=200)
members = forms.ModelMultipleChoiceField(queryset=User.objects.all(), widget=forms.CheckboxSelectMultiple())
#template snippet
<form method="post" action="/projects/{{ project.slug }}/settings/save/">
{% for field in form %}
<div class="form-row">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help-text">{{ field.help_text }}</p>
{% endif %}
</div>
{% endfor %}
# view.py
def update_project(request, project_slug):
if request.method == 'POST':
form = ProjectSettings(request.POST)
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
project.summary = form.cleaned_data['summary']
project.members = form.cleaned_data['members']
project.save()
return HttpResponseRedirect('/projects/' + project.slug + '/')
else:
data_dict = {'summary': project.summary, 'members': project.members.all()}
form = ProjectSettings(initial=data_dict)
return render_to_response('update_project.html', {'form': form}, context_instance=RequestContext(request))
我希望这是有道理的,并且我深表歉意,因为我真的认为这是我在这里遗漏的一些简单的东西 - 但我无法找到一个具体的示例来展示如何使用非模型表单执行此操作。
提前致谢,
杰米
【问题讨论】:
标签: django django-forms