Python 根据user.has\u perms从数据库填充Django选项字段

Python 根据user.has\u perms从数据库填充Django选项字段,python,django,Python,Django,我正试图根据用户权限更新选项字段。我有一个布尔字段,如果为False(默认值),标准用户可以看到它。否则,如果用户有权限,我希望显示所有内容 视图.py class ExportFormView(FormView): template_name = 'export.html' form_class = ExportForm success_url = '/' def get_form_kwargs(self): kwargs = super(

我正试图根据用户权限更新选项字段。我有一个布尔字段,如果为False(默认值),标准用户可以看到它。否则,如果用户有权限,我希望显示所有内容

视图.py

class ExportFormView(FormView):

    template_name = 'export.html'
    form_class = ExportForm
    success_url = '/'

    def get_form_kwargs(self):
         kwargs = super(ExportFormView, self).get_form_kwargs()
         kwargs.update({
             'request' : self.request
         })
         return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(ExportForm, self).__init__(*args, **kwargs)

    choice_list = []

    if request.user.has_perms('tracker.print_all'):
        e = Muid.objects.values('batch_number').distinct()
    else:
        e = Muid.objects.values('batch_number').distinct().filter(printed=False)
    for item in e:
        choice = item['batch_number']
        choice_list.append((choice, choice))

    batch_number = forms.ChoiceField(choices = choice_list)
class ExportFormView(FormView):

template_name = 'export_muids.html'
form_class = ExportForm
success_url = '/'

def get_form_kwargs(self):
    kwargs = super(ExportFormView, self).get_form_kwargs()
    kwargs.update({
         'request' : self.request
    })
    return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        choice_list = []

        if request.user.has_perms('tracker.print_all'):
            e = Muid.objects.values('batch_number').distinct()
        else:
            e = Muid.objects.values('batch_number').distinct().filter(exported=False)
        for item in e:
            choice = item['batch_number']
            choice_list.append((choice, choice))
        super(ExportForm, self).__init__(*args, **kwargs)
        self.fields['batch_number'] = forms.ChoiceField(choices = choice_list)
forms.py

class ExportFormView(FormView):

    template_name = 'export.html'
    form_class = ExportForm
    success_url = '/'

    def get_form_kwargs(self):
         kwargs = super(ExportFormView, self).get_form_kwargs()
         kwargs.update({
             'request' : self.request
         })
         return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(ExportForm, self).__init__(*args, **kwargs)

    choice_list = []

    if request.user.has_perms('tracker.print_all'):
        e = Muid.objects.values('batch_number').distinct()
    else:
        e = Muid.objects.values('batch_number').distinct().filter(printed=False)
    for item in e:
        choice = item['batch_number']
        choice_list.append((choice, choice))

    batch_number = forms.ChoiceField(choices = choice_list)
class ExportFormView(FormView):

template_name = 'export_muids.html'
form_class = ExportForm
success_url = '/'

def get_form_kwargs(self):
    kwargs = super(ExportFormView, self).get_form_kwargs()
    kwargs.update({
         'request' : self.request
    })
    return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        choice_list = []

        if request.user.has_perms('tracker.print_all'):
            e = Muid.objects.values('batch_number').distinct()
        else:
            e = Muid.objects.values('batch_number').distinct().filter(exported=False)
        for item in e:
            choice = item['batch_number']
            choice_list.append((choice, choice))
        super(ExportForm, self).__init__(*args, **kwargs)
        self.fields['batch_number'] = forms.ChoiceField(choices = choice_list)
我得到的错误是:

NameError at /
name 'request' is not defined

如果有任何帮助,我将不胜感激。我已经在这方面坚持了一段时间(并尝试了许多谷歌的建议/答案)。

找到了如何做到这一点,仍然对其他方式感兴趣

使用pdb,我发现视图设置正确。但我不得不改变形式。我无法从函数(如uu init_uu)外部访问变量,其他函数也应该能够访问该变量,但我需要在init上创建表单,因此我无法等待函数调用

代码:

视图.py

class ExportFormView(FormView):

    template_name = 'export.html'
    form_class = ExportForm
    success_url = '/'

    def get_form_kwargs(self):
         kwargs = super(ExportFormView, self).get_form_kwargs()
         kwargs.update({
             'request' : self.request
         })
         return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(ExportForm, self).__init__(*args, **kwargs)

    choice_list = []

    if request.user.has_perms('tracker.print_all'):
        e = Muid.objects.values('batch_number').distinct()
    else:
        e = Muid.objects.values('batch_number').distinct().filter(printed=False)
    for item in e:
        choice = item['batch_number']
        choice_list.append((choice, choice))

    batch_number = forms.ChoiceField(choices = choice_list)
class ExportFormView(FormView):

template_name = 'export_muids.html'
form_class = ExportForm
success_url = '/'

def get_form_kwargs(self):
    kwargs = super(ExportFormView, self).get_form_kwargs()
    kwargs.update({
         'request' : self.request
    })
    return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        choice_list = []

        if request.user.has_perms('tracker.print_all'):
            e = Muid.objects.values('batch_number').distinct()
        else:
            e = Muid.objects.values('batch_number').distinct().filter(exported=False)
        for item in e:
            choice = item['batch_number']
            choice_list.append((choice, choice))
        super(ExportForm, self).__init__(*args, **kwargs)
        self.fields['batch_number'] = forms.ChoiceField(choices = choice_list)
forms.py

class ExportFormView(FormView):

    template_name = 'export.html'
    form_class = ExportForm
    success_url = '/'

    def get_form_kwargs(self):
         kwargs = super(ExportFormView, self).get_form_kwargs()
         kwargs.update({
             'request' : self.request
         })
         return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(ExportForm, self).__init__(*args, **kwargs)

    choice_list = []

    if request.user.has_perms('tracker.print_all'):
        e = Muid.objects.values('batch_number').distinct()
    else:
        e = Muid.objects.values('batch_number').distinct().filter(printed=False)
    for item in e:
        choice = item['batch_number']
        choice_list.append((choice, choice))

    batch_number = forms.ChoiceField(choices = choice_list)
class ExportFormView(FormView):

template_name = 'export_muids.html'
form_class = ExportForm
success_url = '/'

def get_form_kwargs(self):
    kwargs = super(ExportFormView, self).get_form_kwargs()
    kwargs.update({
         'request' : self.request
    })
    return kwargs
class ExportForm(forms.Form):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        choice_list = []

        if request.user.has_perms('tracker.print_all'):
            e = Muid.objects.values('batch_number').distinct()
        else:
            e = Muid.objects.values('batch_number').distinct().filter(exported=False)
        for item in e:
            choice = item['batch_number']
            choice_list.append((choice, choice))
        super(ExportForm, self).__init__(*args, **kwargs)
        self.fields['batch_number'] = forms.ChoiceField(choices = choice_list)
另一个参考。