【发布时间】:2015-09-06 12:13:24
【问题描述】:
我正在开发我的第一个 Django 项目。
我在两个模型之间存在多对多关系:用户和项目。 在更新项目时,我想显示带有添加新成员的表单,并根据当前项目用户使用正确的选项删除现有成员字段。
这是我目前尝试过的:
- 从 URL 获取当前项目
- 将当前项目传递给模型表单
- 在表单中,运行自定义查询集。
问题:查询集结果不显示。
在views.py中
类 UpdateProject(LogInRequiredMixin, UpdateView):
""" Class to Edit Project.
"""
form_class = ProjectUpdateForm
template_name = 'project/create.html'
def get_object(self):
self.project_instance = models.Project.objects.get(pk=self.kwargs['project'])
return self.project_instance
def get_form_kwargs(self):
kwargs = super(UpdateProject, self).get_form_kwargs()
kwargs.update({'project': self.project_instance})
return kwargs
对于表格 项目更新表单
class ProjectUpdateForm(forms.ModelForm):
""" Form to update Project Field. """
add_member = forms.CharField(label="Add New Members", widget=forms.CheckboxSelectMultiple)
del_member = forms.CharField(label="Remove Members", widget=forms.CheckboxSelectMultiple)
def __init__(self, *args, **kwargs):
self.project = kwargs.pop('project')
super(ProjectUpdateForm, self).__init__(*args, **kwargs)
print MyUser.objects.exclude(pk__in=self.project.members.all())
print MyUser.objects.filter(pk__in=self.project.members.all())
self.fields['add_member'].queryset = MyUser.objects.exclude(pk__in=self.project.members.all())
self.fields['del_member'].queryset = MyUser.objects.filter(pk__in=self.project.members.all())
# Rest of Class Logic
打印语句正在运行并返回正确的结果,但是我无法在 app.xml 中查看结果。它显示为空白。
另外,我想知道他们实现相同的更简单方法吗? (在我看来,我不应该明确地通过项目?)
【问题讨论】:
-
两种表单的元类是什么?
-
@Pcriulan For Form class Meta: model = Project fields = ['title', 'description'] 对于 View,我没有使用 Meta
-
好的,所以您需要在字段中添加自定义字段:fields = ['title', 'description', 'add_member', 'del_member']。这样你就告诉 django 要注意这些字段。
-
做到了。仍然没有改善。
-
@Pcriulan 明确地说,它是(并且曾经)在页面上显示两个字段名称,但没有显示任何选项
标签: django django-forms django-queryset modelform