限制选项至

3 投票
2 回答
779 浏览
提问于 2025-04-15 13:25

我有一个叫做“项目”的模型,它有一个多对多的字段叫“用户”。我还有一个任务模型,它有一个外键指向项目,并且有一个字段叫“分配给”。我想限制“分配给”这个字段的选择,只能选择当前项目的用户,应该怎么做呢?

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)

撰写回答