以 Django 形式获取当前用户 [英] get current user in Django Form

查看:35
本文介绍了以 Django 形式获取当前用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
以Django形式获取请求数据

我的客人模型有一部分:

There's part of my Guest Model:

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

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

The problem is in save method. How can I associate guest with the currently logged in user?

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

而不是 user=1 我需要有当前登录用户的 id.

Instead of user=1 I need to have id of the currently logged in user.

谢谢!

推荐答案

我找到了方法 :)

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

def __init__(self, user, *args, **kwargs):
    self.user = user
    super(RSVPForm, self).__init__(*args, **kwargs)

  • 更改视图函数,并将 request.user 传递给表单

  • Change view function, and pass request.user to the form

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

  • save() 方法的行现在看起来像这样:

  • the line of the save() method would look like this now:

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

  • 这篇关于以 Django 形式获取当前用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆