【发布时间】:2022-01-18 23:07:35
【问题描述】:
我今天大部分时间都在寻找这个答案。长话短说我试图弄清楚如何获取当前登录的用户 ID,以便我可以动态查询一个字段并根据他们的 ID 显示可供他们使用的选项。除了我需要他们的身份证的部分外,这一切都很好。当他们打开视图时我需要它,而不是在表单保存时间。
这是我的代码示例...
Forms.py
LineItemFormSet = inlineformset_factory(ParentModel, ChildModel, extra=1, fields=['line_item_cost_center','line_item_description','line_item_vendor'])
class LineItemFormSet(LineItemFormSet,BaseInlineFormSet):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
print(self.user)
super(LineItemFormSet, self).__init__(*args, **kwargs)
def add_fields(self, form, index):
super(LineItemFormSet,self).add_fields(form,index)
form.fields['line_item_description'].widget.attrs['class'] = 'budget2'
form.fields['line_item_description'].widget.attrs['placeholder'] = 'Required'
qs1 = Vendor.objects.exclude(Q(is_active=False)).distinct()
form.fields['line_item_vendor'].queryset = qs1
上面的工作很好....但是,我正在尝试获取当前用户,以便我可以做类似的事情..
Vendor.objects.filter(Q(admin_access=user)).exclude(is_active=False).distinct()
我已经尝试过继承 BaseInlineFormset 的各种化身......但无济于事。
我尝试过类似...
class BaseFormSet(BaseInlineFormSet):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request", None)
super(BaseFormSet, self).__init__(*args, **kwargs)
然后我做了类似...
LineItemFormSet = inlineformset_factory(ParentEntity, ChildEntity, formset=BaseFormSet, form=ChildForm, extra=1)
formset = LineItemFormSet(form_kwargs={'request': request})
然后我不断收到一条错误消息,提示找不到请求。
我的视图看起来像...
class CreateLineItemView(LoginRequiredMixin,CreateView):
model = NewLineItem
form_class = CreateLineItemForm
template_name = 'create_line_item.html'
def get(self, request, *args, **kwargs):
self.object = None
context = self.get_context_data(object=self.object)
form_class = self.get_form_class()
form = self.get_form(form_class)
budget_line_item_form = CreateLineItemFormSet()
return self.render_to_response(
self.get_context_data(form=form,
line_item_form=line_item_form,
context=context,
))
def get_form_kwargs(self, *args, **kwargs):
kwargs = super(CreateLineItemView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
任何关于如何获取当前用户以便我可以利用我的查询集的想法将不胜感激!
【问题讨论】:
-
不应该是
formset = LineItemFormSet(request=request),否则你得从form_kwargs得到请求 -
@BrianDestura 感谢您的反馈。我试过你的建议,它仍然一直说请求未定义。
-
你能分享你尝试过的最新代码吗?
-
@BrianDestura 我实际上正在使用上面概述的代码,并按照您的建议更改了有问题的行,这就是我收到的错误消息。
-
formset = LineItemFormSet(request=request)
标签: django django-models django-views django-forms django-templates