Объекты фильтра Django models для ManyToManyField
Например, у меня есть модель:
class User(models.Model):
is_active = models.BooleanField(
'Is active user?',
default=True
)
friends = models.ManyToManyField(
'self',
default=None,
blank=True,
)
Как я могу отфильтровать только активных пользователей в ManyToManyField? (Это не будет работать, просто мои идеи, для ManyToManyField нужна модель в to=)
>queryset = User.objects.filter(is_active=True)
friends = models.ManyToManyField(
queryset,
default=None,
blank=True,
)
Вы можете работать с limit_choices_to=…
[Django-doc] для ограничения вариантов добавления элемента в ManyToManyField
, поэтому здесь вы можете реализовать это как:
class User(models.Model):
is_active = models.BooleanField(
'Is active user?',
default=True
)
friends = models.ManyToManyField(
'self',
limit_choices_to={'is_active': True}
)
Это отфильтрует набор доступных User
в ModelForm
, который вы построите для этой модели, и в ModelAdmin
для этой модели.