有 Django 2.2,Python 3.7,这是构造:
视图.py
def complex_detail(request, slug):
object = RealObject.objects.get(slug=slug)
users = RealUser.objects.filter(department=request.user.department)
context = {
'object': object,
'users': users,
}
template = 'objects/object_detail.html'
return render(request, template, context)
模型文件
class RealObject(models.Model):
title = models.CharField('Название', max_length=128, db_index=True, unique=True)
slug = models.SlugField('Идентификатор', max_length=128, db_index=True, unique=True, blank=True)
author = models.ForeignKey(RealUser, related_name='user_objects', on_delete=models.CASCADE, null=True, verbose_name='Менеджер')
object_type = models.ForeignKey(ObjectType, on_delete=models.CASCADE, verbose_name='Тип объекта')
active = models.BooleanField('Активен', default=False)
模板.html
<form action="complex_detail" method="POST">
{% csrf_token %}
<select>
{% for user in users %}
{% if user.active == True %}
<option name="{{ user.last_name }}">{{ user.first_name }} {{ user.last_name }}</option>
{% endif %}
{% endfor %}
</select>
<input type="submit" role="button" value="Назначить" name="apply">
</form>
模板 (template.html) 有一个小表单,其中包含一个包含部门员工的下拉列表和“分配”按钮。任务是这样的:有必要将对象的作者更改为我们从列表中选择的作者......
感谢您的关注。
更新
视图.py
def complex_detail(request, slug):
object = RealObject.objects.get(slug=slug)
users = RealUser.objects.filter(department=request.user.department)
form = ChangeAuthorObject(request.user.department, request.POST)
if 'POST' in request.method:
if form.is_valid():
form.save()
else:
form = ChangeAuthorObject(request.user.department)
context = {
'object': object,
'users': users,
'form': form,
}
template = 'objects/object_detail.html'
return render(request, template, context)
表格.py
class ChangeAuthorObject(forms.ModelForm):
class Meta:
model = RealObject
fields = (
'author',
)
def __init__(self, department, *args, **kwargs):
super().__init__(self, *args, **kwargs)
self.fields['author'].queryset = RealUser.objects.filter(department=department)
模板.html
<form action="complex_detail" method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" role="button" value="Назначить" name="apply">
</form>
首先:我没有
name
在select
. 选项必须有一个属性value
。阅读有关 html 表单的信息第二:Django 不适合这种复杂的解决方案。一切都可以轻松得多。使用 django 表单,你会没事的,你不必手动挖掘 POST。
开始使用表单后,代码将缩短为:
这是一个更灵活的解决方案,更易于维护并且验证已经有效
2019 年 7 月 22 日更新
要仅从特定部门中选择用户,请将部门作为表单参数传递并覆盖查询集