У меня есть следующий код:Написание менеджера для фильтрации набора результатов запроса
class GroupDepartmentManager(models.Manager):
def get_query_set(self):
return super(GroupDepartmentManager, self).get_query_set().filter(group='1')
class Department(models.Model):
name = models.CharField(max_length=128)
group = models.ForeignKey(Group)
def __str__(self):
return self.name
objects = GroupDepartmentManager()
... и она отлично работает. Единственное, что мне нужно заменить group='1'
на group=(the group specified by group = models.ForeignKey(Group))
. У меня довольно много времени, пытаясь определить, должен ли этот внешний ключ быть передан в класс, или в функцию get_query_set, или что. Я знаю, что вы можете выполнить это с помощью group.department_set.filter(group=desired group)
, но я пишу эту модель для сайта администратора, поэтому мне нужно использовать переменную, а не константу после знака =.
У меня есть некоторые проблемы с пониманием того, чего вы пытаетесь достичь. Вы хотите, чтобы department_instance.objects.all() возвращал только те отделы, которые находятся в той же группе, что и department_instance? - Maciej Pasternacki 0 секунд назад –
Да, Джон ваш случай не ясен. Какая определенная группа должна быть выбрана, например, Department.objects.all()? – kibitzer
Хорошо, так что есть список групп. В каждой группе есть несколько департаментов. У меня также есть Сотрудники. Каждый сотрудник принадлежит к одной группе и одному отделу. Когда я редактирую сотрудника, раскрывающийся список отделений показывает все отделы в базе данных, а не только отделы в группе сотрудников. Итак, я хочу показывать только департаменты в группе сотрудников. Я думал, что могу сделать это, ограничив результаты department_set, чтобы быть отделами в определенной группе. Возможно, я действительно смущен. Но этого я и пытаюсь достичь. – John