限制选择

时间:2009-08-06 14:53:43

标签: python django-models

我有一个名为Project的模型,它有一个m2m字段用户。我有一个带有FK项目的任务模型。它有一个字段assigned_to。如何将assigned_to的选择限制为仅限当前项目的用户?

2 个答案:

答案 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)
相关问题