Python 将请求传递到Django表单仍然显示未定义的self

Python 将请求传递到Django表单仍然显示未定义的self,python,django,Python,Django,我目前正在使用Python和Django制作一个Web应用程序。正如我的标题所述,我正试图将请求传递给我的一个表单类,以便使用用户数据。我知道在这方面有很多问题,但我已经尝试了其中的每一个,它不允许我访问用户参数 我的代码: 表格类别: class CreateEventForm(forms.ModelForm): def __init__(self, request, *args, **kwargs): self.request = request super(CreateE

我目前正在使用Python和Django制作一个Web应用程序。正如我的标题所述,我正试图将请求传递给我的一个表单类,以便使用用户数据。我知道在这方面有很多问题,但我已经尝试了其中的每一个,它不允许我访问用户参数

我的代码:

表格类别:

class CreateEventForm(forms.ModelForm):

def __init__(self, request, *args, **kwargs):
    self.request = request
    super(CreateEventForm, self).__init__(*args, **kwargs)

name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
image = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
description = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control'}))
location = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
ticket_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
event_owner = forms.ModelChoiceField(queryset=EventOwner.objects.all().filter())
ticket_price = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))

class Meta:
    model = Event
    fields = ['name', 'image', 'description', 'category', 'event_owner', 'ticket_name', 'ticket_price', 'location']
我的看法是:

class CreateEventView(View):
    form_class = CreateEventForm
    template_name = 'create-event.html'

    def get(self, request):
        form = self.form_class(request, request.POST)
        if request.user.is_authenticated:

            # Now check to make sure the user has created an "Event Organiser" name
            eo = EventOwner.objects.filter(owner_id=request.user.id)

            # If there has been an event owner made
            if eo.count() > 0:
                return render(request, self.template_name, {'form': form})

            # Else send the user to the create event owner
            else:
                messages.warning(request, 'You must have an organiser profile setup before creating an event.')
                return redirect('/create-organiser')
        else:
            messages.success(request, 'You have to login before you can create an event.')
            return redirect('/login')

然而,每当我尝试使用self.request时,它都不起作用。上面说未解析的引用“self”

上面的操作仍然没有问题,但是我混淆了init部分的一些内容。让init保持原样

通过先创建一个包含所有对象的查询集,然后按如下方式覆盖它们,我可以通过使用request.user参数对查询集进行过滤来限制查询集:

class CreateEventForm(forms.ModelForm):

    event_owner = forms.ModelChoiceField(queryset=User.objects.all())

    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(CreateEventForm, self).__init__(*args, **kwargs)

        self.fields['event_owner'].queryset = EventOwner.objects.filter(owner=self.request.user)

它显示在哪里?我正在使用PyCharm,所以每次我尝试使用“self.request”时,它都会在它下面加上红色下划线,并表示它是一个未解析的引用。但是您试图使用它的位置呢?我尝试在表单类中的构造函数之后打印它,就在main之前。理想情况下,我希望使用,以便可以这样做:
queryset=EventOwner.objects.all().filter(owner\u id=self.request.user.id)
,但您必须在方法中使用它
self
是一个方法的参数,不在外部定义。