Объекты фильтра 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 для этой модели.

Вернуться на верх