【问题标题】:get current user in Django Form [duplicate]在Django Form中获取当前用户[重复]
【发布时间】:2011-02-25 16:45:21
【问题描述】:

可能重复:
get request data in Django form

我的访客模型的一部分:

class Guest(models.Model):
    event = models.ForeignKey(Event, related_name='guests')
    user = models.ForeignKey(User, unique=True, related_name='guests')
    ...

获取客人回复的表单:

class RSVPForm(forms.Form):
    attending_d= forms.ChoiceField(choices=VISIBLE_ATTENDING_CHOICES, initial='yes', widget=forms.RadioSelect)
    attending_b = forms.ChoiceField(choices=VISIBLE_ATTENDING_CHOICES, initial='yes', widget=forms.RadioSelect)
    number_of_guests = forms.IntegerField(initial=0)
    comment = forms.CharField(max_length=255, required=False, widget=forms.Textarea)

    ....    

    def save(self):
        guest = self.guest_class.objects.get(user=1)
        guest.attending_status_d = self.cleaned_data['attending_d']
        guest.attending_status_b = self.cleaned_data['attending_b']
        guest.number_of_guests = self.cleaned_data['number_of_guests']
        guest.comment = self.cleaned_data['comment']
        guest.save()
        return guest

问题在于保存方法。如何将访客与当前登录的用户关联?

guest = self.Guest.objects.get(user=1)

我需要的是当前登录用户的 ID,而不是 user=1

谢谢!

【问题讨论】:

    标签: django-forms django-users


    【解决方案1】:

    我找到了方法:)

    1. 在表单上写一个__init__ 方法:

      def __init__(self, user, *args, **kwargs):
          self.user = user
          super(RSVPForm, self).__init__(*args, **kwargs)
      
    2. 更改视图函数,并将 request.user 传递给表单

      def event_view(request, slug, model_class=Event, form_class=RSVPForm,
                                      template_name='rsvp/event_view.html'):
          event = get_object_or_404(model_class, slug=slug)
      
          if request.POST:
              form = form_class(request.user, request.POST)
      
          if form.is_valid():
              guest = form.save()
              return HttpResponseRedirect(reverse('rsvp_event_thanks',
                          kwargs={'slug': slug, 'guest_id': guest.id}))
          else:
              form = form_class(request.user)
      
          return render_to_response(template_name, {
              'event': event,
              'form': form,
          }, context_instance=RequestContext(request))
      
    3. save() 方法的行现在看起来像这样:

      guest = self.guest_class.objects.get(user=self.user)
      

    【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2021-12-18
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多