django - Django-select2 按所有者过滤小部件数据(相关用户)
问题描述
我正在使用 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)
解决方案
我需要使用 search_fields 更改 mixin 并将 data_view 参数推送给它:
表格.py:
class AccountSearchFieldMixin(object):
search_fields = [
'login__icontains',
'password__icontains',
'phone__icontains',
]
def __init__(self, *args, **kwargs):
kwargs['data_view'] = 'account_json'
super(AccountSearchFieldMixin, self).__init__(*args, **kwargs)
使用 select2 的 json 答案请求创建视图。
视图.py:
class AccountJsonView(AutoResponseView):
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(owner=self.request.user)
urls.py 中的最后一次更改:
path('fields/account.json', login_required(views.AccountJsonView.as_view()), name="account_json"),
推荐阅读
- xml - Mulesoft 3 DataWeave - 按任意长度分割字符串
- javascript - 我怎样才能使这个函数确保返回的坐标与其他坐标的距离最小?
- python-3.x - 如何使用停在边缘的相机使视差滚动正常工作pygame
- performance - Mariadb 10.0 和 10.4 之间的性能问题
- vba - 在 VBA 中使用 Selenium 选择/取消选择网页上的一组复选框
- javascript - 使用变量名访问对象中的属性时出现问题
- powershell - 使用可变源名称的 Powershell 复制项
- java - 不要重复检查事件方法(Bukkit/Spigot)
- ethereum - 收到错误“创建 HelloWorld 错误:TypeError:无法将未定义或 null 转换为对象”
- python - pandas dataframe:根据dict替换单元格中的(独立)子字符串