Фильтр queryset в виджете django select2

Можно ли фильтровать набор запросов в формах Django Select2?

У меня есть форма, которая отправляет прямое сообщение пользователю, и я хочу иметь возможность фильтровать пользователей.

s2forms.ModelSelect2Widget, как я вижу, выбирает все экземпляры модели User

Теперь мне нужно внедрить флаг в модель User (allow_direct_messages), и если пользователь разрешает отправлять прямые сообщения, то мне нужно отфильтровать их соответствующим образом.

class DirectMessageCreateForm(forms.ModelForm):
class Meta:
    model = DirectMessage
    fields = ("author", "recipient", "content")
    labels = {
        "author": "",
    }
    widgets = {
        "recipient": UsersWidget,
        "content": forms.Textarea(attrs={
            'class': 'block p-3 w-full text-md bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500'
                     ' focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 '
                     'dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500',
            'placeholder': "Type your message here..."
        }),
        "author": forms.TextInput,
    }



class UsersWidget(s2forms.ModelSelect2Widget):
search_fields = [
    "name__icontains",
    "email__icontains",
]

Может кто-то знает, как сделать пользовательский кверисет внутри формы ModelSelect2Widget?

Заранее спасибо

Я нашел решение Надеюсь, это поможет кому-нибудь

Не бойтесь сделать атрибут queryset внутри вашего класса:

class UsersWidget(s2forms.ModelSelect2Widget):
*queryset = User.objects.exclude(profile__allow_direct_messages=False)*
search_fields = [
    "name__icontains",
    "email__icontains",
]

Это должно работать!

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