我目前正在使用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"
答案 0 :(得分:0)
上面仍然没有问题,但我从 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)