Я использую django-select2 с представлением на основе классов (создание, обновление, удаление представления)
В CreateView я использую form_class с моей формы. В этой форме я использую виджеты для выбора связанных объектов. И мне нужно отфильтровать эти объекты с помощью create_user (владельца). Как передать текущего пользователя в моей схеме в класс виджетов ModelSelect2MultipleWidget?
forms.py:
class AccountSearchFieldMixin(object):
search_fields = [
'login__icontains',
'password__icontains',
'phone__icontains',
]
class AccountSelect2TagWidget(AccountSearchFieldMixin, ModelSelect2MultipleWidget):
model = VkAccount
queryset = VkAccount.objects.exclude(proxy__isnull=True)
def create_value(self, value):
self.get_queryset().create(name=value)
class TaskVkInvitationsFriendsSearchForm(forms.ModelForm):
# country = ModelChoiceField(Countries.objects.all(), empty_label=None, label='Страна')f
class Meta:
model = TaskVkInvitationsFriendsSearch
exclude = ['type', 'date_creation', 'date_update', 'maintask', 'invited_friends']
widgets = {
'accounts': AccountSelect2TagWidget,
'cities': CitiesSelect2TagWidget,
'scheduler_data': forms.HiddenInput,
# 'country': CountrySelect2TagWidget
}
def __init__(self, *args, **kwargs):
self.owner = kwargs.pop('owner')
super(TaskVkInvitationsFriendsSearchForm, self).__init__(*args, **kwargs)
views.py:
class BaseTaskMixin:
model = TaskVkInvitationsFriendsSearch
form_class = TaskVkInvitationsFriendsSearchForm
success_url = reverse_lazy('vk_bot_tasks_list')
template_name = 'vk_bot/create_task.html'
class TaskCreateView(BaseTaskMixin, CreateView):
def form_valid(self, form):
model = form.save(commit=False)
t = Task()
t.save()
model.maintask = t
model.save()
form.instance.owner = self.request.user
return super(TaskCreateView, self).form_valid(form)