Python 将请求传递到Django表单仍然显示未定义的self
我目前正在使用Python和Django制作一个Web应用程序。正如我的标题所述,我正试图将请求传递给我的一个表单类,以便使用用户数据。我知道在这方面有很多问题,但我已经尝试了其中的每一个,它不允许我访问用户参数 我的代码: 表格类别: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
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
是一个方法的参数,不在外部定义。