我正在使用 django-select2 和基于类的视图(创建、更新、删除视图) 在 CreateView 中,我在表单中使用 form_class。在这种形式中,我使用小部件来选择相关对象。我需要通过 created_user (所有者)过滤这些对象。如何将我的方案中的当前用户传递给小部件 ModelSelect2MultipleWidget 类?
表格.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)
视图.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)