我有一个名为Project的模型,它有一个m2m字段用户。我有一个带有FK项目的任务模型。它有一个字段assigned_to。如何将assigned_to的选择限制为仅限当前项目的用户?
答案 0 :(得分: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)
答案 1 :(得分:0)
您需要创建custom form for the admin。
您的表单应包含ModelChoiceField,您可以在其中指定一个queryset参数,用于定义可用选项的内容。此表单可以是ModelForm。
(以下示例假定用户对项目模型具有FK)
<强> 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)