Здесь есть два отдельных вопроса.
Если вы хотите применить это ограничение на уровне модели, вам, возможно, придется определить явную сквозную модель и переопределить ее метод save () (вы не можете просто переопределить Task.save (), так как это не так. обязательно вызывается для добавления записей в M2M). Django 1.2 будет иметь более полную структуру проверки модели, больше похожую на проверку формы.
Если вы хотите, чтобы в администраторе отображались только определенные варианты, это проблема уровня формы. Вы можете динамически установить атрибут queryset для ModelMultipleChoiceField в методе init формы:
class TaskForm(forms.ModelForm):
class Meta:
model = Task
def __init__(self, *args, **kwargs):
super(TaskForm, self).__init__(*args, **kwargs)
self.fields['prerequisites'].queryset = Task.objects.filter(job=self.instance.job)
Вам может потребоваться ввести некоторые дополнительные проверки здесь для обработки случая создания новой Задачи (в этом случае «self.instance.job», вероятно, будет Нет); какой набор доступных предварительных условий вам нужен, четко не определен, поскольку у новой задачи еще нет задания.