【问题标题】:Django UpdateView: AttributeError: not able to access forms.Form data -> type object 'EventSingleAttendeeForm' has no attribute 'attendee_name'Django UpdateView:AttributeError:无法访问forms.Form数据->类型对象'EventSingleAttendeeForm'没有属性'attendee_name'
【发布时间】:2019-07-27 02:48:06
【问题描述】:

views.py

class EventUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Event
    form_class = EventUpdateForm
    second_form_class= EventSingleAttendeeForm
    template_name = 'events/event_update.html'

    def form_valid(self, form):
        form.instance.creator = self.request.user
        return super().form_valid(form)

    def test_func(self):
        event = self.get_object()
        if self.request.user == event.creator:
            return True
        return False

    def get_context_data(self, *args, **kwargs):
        context = super(EventUpdateView, self).get_context_data(*args, **kwargs)
        context['form2'] = self.second_form_class
        return context

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        form2 = self.second_form_class(request.POST)

        if form.is_valid() and form2.is_valid():
            event_data = form.save(commit=False)
            # attendee_name = form2.attendee_name
            if form2.attendee_name != '' and form2.attendee_email != '' and form2.attendee_mobile:
                attendee = Attendee(name=form2.attendee_name, email=form2.attendee_email, mobile=form2.attendee_mobile)
                existing_attendee = Attendee.objects.filter(Q(email__exact=form2.attendee_email) | Q(mobile__exact=form2.attendee_mobile))
                if existing_attendee:
                    attendee = existing_attendee.first()
                else:
                    attendee.save()
                form.attendees.add(attendee)
            form.save()
            return redirect('some')

forms.py

class EventSingleAttendeeForm(forms.Form):
    attendee_name = forms.CharField(max_length=50, required=False)
    attendee_mobile = forms.IntegerField(required=False)
    attendee_email = forms.EmailField(required=False)



builtins.AttributeError
AttributeError: type object 'EventSingleAttendeeForm' has no attribute 'attendee_name'

我收到此错误,我想访问这些字段中的数据,但我无法访问。我们将不胜感激。

【问题讨论】:

    标签: python django django-forms django-class-based-views


    【解决方案1】:

    调用form.is_valid()后,可以通过cleaned_data访问表单的数据。

    if form2.cleaned_data['attendee_name'] != '' and form2.cleaned_data['attendee_email' != '' and form2.cleaned_data['attendee_mobile']:
    

    或者,如果是模型表单,可以使用form.save()返回的实例,也可以使用form.instance。

    【讨论】:

      【解决方案2】:

      您是否将字段传递给 Meta 类?像这样:

      class EventSingleAttendeeForm(forms.Form):
          attendee_name = forms.CharField(max_length=50, required=False)
          attendee_mobile = forms.IntegerField(required=False)
          attendee_email = forms.EmailField(required=False)
      
          class Meta:
              fields = (
                  'attendee_name',
                  'attendee_mobile',
                  'attendee_email'
              )
      

      【讨论】:

      • TypeError: quote_from_bytes() expected bytes in super(EventUpdateView, self).post(request, *args, **kwargs) 任何帮助将不胜感激
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      相关资源
      最近更新 更多