Ограничить выбор - PullRequest
       6

Ограничить выбор

3 голосов
/ 06 августа 2009

У меня есть модель с именем Project, которая имеет пользователей области m2m. У меня есть модель задачи с проектом FK. И у него есть поле assign_to. Как я могу ограничить выбор assign_to только пользователями текущего проекта?

Ответы [ 2 ]

1 голос
/ 03 сентября 2009

Вы можете сделать это по-другому, используя этот изящный фабричный прием.

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)
0 голосов
/ 06 августа 2009

Вам необходимо создать пользовательскую форму для администратора .

Ваша форма должна содержать ModelChoiceField , в котором вы можете указать параметр набора запросов, который определяет доступные варианты. Эта форма может быть 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)
...