限制选项至
我有一个叫做“项目”的模型,它有一个多对多的字段叫“用户”。我还有一个任务模型,它有一个外键指向项目,并且有一个字段叫“分配给”。我想限制“分配给”这个字段的选择,只能选择当前项目的用户,应该怎么做呢?
2 个回答
0
你需要为管理后台创建一个自定义表单。
这个表单里应该包含一个ModelChoiceField,你可以在这里指定一个查询集参数,这个参数用来定义可选的选项。这个表单可以是一个ModelForm。
(下面的例子假设用户有一个外键指向你的项目模型)
forms.py
from django import forms
class TaskForm(forms.ModelForm):
assigned_to = forms.ModelChoiceField(queryset=Users.objects.filter(user__project=project))
class Meta:
model = Task
然后把这个表单分配给ModelAdmin。
admin.py
from django.contrib import admin
from models import Task
from forms import TaskForm
class TaskAdmin(admin.ModelAdmin):
form = TaskForm
admin.site.register(Task, TaskAdmin)
1
你可以用另一种方法,利用这个很方便的表单工厂技巧。
def make_task_form(project):
class _TaskForm(forms.Form):
assigned_to = forms.ModelChoiceField(
queryset=User.objects.filter(user__project=project))
class Meta:
model = Task
return _TaskForm
然后在你的视图代码中,你可以这样做:
project = Project.objects.get(id=234)
form_class = make_task_form(project)
...
form = form_class(request.POST)