我正在尝试使用 django 表单在我的网页中创建一个用户权限字段,其工作方式与使用 FilterSelectMultiple
在管理页面中完全相同。 。目前它正确填充数据并且选择和取消选择按钮正在工作,但我无法保存表单,每当我点击保存时,页面刷新并且所有用户都会再次取消选择。
user = forms.ModelMultipleChoiceField(queryset=Project.objects.all(),
widget=FilteredSelectMultiple('User', is_stacked=False))
不工作。
我该如何解决这个问题?非常感谢任何帮助,谢谢
下面是我的代码:
HTML:
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" />
<form method="POST" enctype="multipart/form-data" id=setting_form" name="setting_form" onsubmit="updateDiv()">{% csrf_token %}
<!--USER-->
<div class="field">
<label>User permissions:</label>
<div class="related-widget-wrapper">
<select name="user_permissions" id="id_user_permissions" multiple="multiple" class="selectfilter" data-field-name="user permissions" data-is-stacked="0">
<option value={{ form.user }}></option>
</select>
</div>
<div class="btn-toolbar pull-right">
<div class="btn-group" role="group" aria-label="...">
<input class="btn btn-success" type="submit" value="Save Changes"/>
</div>
</div>
</form>
<script src="/admin/jsi18n"></script>
<script type="text/javascript" src="/static/admin/js/vendor/jquery/jquery.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
查看.py
def project_setting(request):
form = EditProjectForm(request.POST or None, request.FILES or None, instance=selected_project, prefix='settings')
if form.is_valid():
inst = form.save(commit=False)
inst.save()
form.save_m2m()
return HttpResponseRedirect('/dashboard/projects/{}/setting'.format(project_id))
context = {
'form': form,
}
return render(request, 'dashboard/projects/setting.html', context=context)
表单.py:
from django.contrib.admin.widgets import FilteredSelectMultiple
class EditProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = '__all__'
user = forms.ModelMultipleChoiceField(queryset=Project.objects.all(),
widget=FilteredSelectMultiple('User', is_stacked=False))
模型.py:
class Project(models.Model):
user = models.ManyToManyField(Employee, blank=True)
编辑:
检查页面源代码后,我的表单声明如下
<select name="user_permissions" id="id_user_permissions" multiple="multiple" class="selectfilter" data-field-name="user permissions" data-is-stacked="0">
<option value=<select name="settings-user" id="id_settings-user" multiple="multiple">
<option value="3">User A</option>
<option value="4">User B</option>
</select></option>
</select>
它宣布了另一个 <select>
在我的里面<select>
标签
最佳答案
我不熟悉那个小部件,但是,将用户字段渲染到这样的选项标记中看起来很奇怪。我也没有看到关闭表单标签或提交按钮?
我本以为它会是这样的:
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" />
<form method="POST" enctype="multipart/form-data" id=setting_form" name="setting_form" onsubmit="updateDiv()">{% csrf_token %}
<!--USER-->
<div class="field">
<label>User permissions:</label>
<div class="related-widget-wrapper">
{{form.user}}
</div>
<input type="submit" value="save">
</form>
<script src="/admin/jsi18n"></script>
<script type="text/javascript" src="/static/admin/js/vendor/jquery/jquery.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
关于python - Django 表单中的 FilterSelectMultiple 不保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585951/