将请求传递给Django表单仍显示自定义未定义

时间:2017-02-27 18:03:49

标签: python django

我目前正在使用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"

1 个答案:

答案 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)