Фильтр 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",
]
Это должно работать!