gpt4 book ai didi

python - Django CBV - 根据权限设置表单类?

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:51 24 4
gpt4 key购买 nike

我在 forms.py 中创建了两个表单,一个表单的字段比另一个少。

我现在想做的是获取当前用户权限并根据这些权限设置 CBV 的表单类。

以下是我目前的看法:

class EditCircuit(UpdateView):
model = Circuits
# if user_passes_test(lambda u: u.has_perm('config.edit_circuit')))
form_class = CircuitForm
# else
# form_class = CircuitFormRestricted
template_name = "sites/circuit_form.html"

@method_decorator(user_passes_test(lambda u: u.has_perm('config.edit_circuit')))
def dispatch(self, *args, **kwargs):
self.site_id = self.kwargs['site_id']
self.site = get_object_or_404(SiteData, pk=self.site_id)
return super(EditCircuit, self).dispatch(*args, **kwargs)

def get_success_url(self, **kwargs):
return reverse_lazy("sites:site_detail_circuits", args=(self.site_id,))

def form_valid(self, form):
form.instance.site_data = self.object.site_data
return super(EditCircuit, self).form_valid(form)

def get_form_kwargs(self, *args, **kwargs):
kwargs = super().get_form_kwargs()
return kwargs

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['SiteID']=self.site_id
context['SiteName']=self.site.location
context['FormType']='Edit'
context['active_circuits']='class="active"'

return context

最佳答案

您可以覆盖 get_form_class 方法。

def get_form_class(self):
if self.request.user.has_perm('config.edit_circuit'):
return CircuitForm
return CircuitFormRestricted

此外,您似乎不需要 get_form_kwargs 定义,因为它目前没有执行任何操作。

关于python - Django CBV - 根据权限设置表单类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48687849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com