如何在Django views.py中获取登录用户的用户名

时间:2017-07-12 23:40:57

标签: python django username

我是python和Django的新手并且正在努力解决以下问题:

我有一个登录用户,用于填写包含2个字段(urlA和urlB)的表单。这两个字段以及时间戳和用户用户名应该存储在我的PSQL数据库中。

我目前的问题是urlA和urlB字段是在数据库中推送的,但是用户名保持为空或者我收到一个错误,即未定义self。

我在views.py中尝试了以下变体:

forwardform.user = request.user.username 
User.objects.get(username=self.request.user) # -> gives error concering self

views.py

def forwardthis(request):
    forwardform = AddUrlForm(request.POST or None)
    if request.method == 'POST' and forwardform.is_valid():

        forwardform.user = request.user.username
        forwardform.save()
    query_results = forwards.objects.all()
    template = loader.get_template('forwardthis.html')
    context = {

        'forwardform': forwardform ,
        'query_results':query_results
    }

    #output = ', '.join([p.user for p in query_results])

    return HttpResponse(template.render(context,request))

models.py

class forwards(models.Model):
    user = models.CharField(max_length = 150)
    urlA = models.CharField(max_length = 254)
    urlB = models.CharField(max_length = 254)
    timestamp = models.DateTimeField('date created', auto_now_add=True)

forms.py

class AddUrlForm(forms.ModelForm):

    class Meta:
        model = forwards
        # fields = '__all__'
        exclude = ["user"]

2 个答案:

答案 0 :(得分:1)

使用commit=False保存表单,设置用户名,然后保存实例。

if forwardform.is_valid():
    forward = forwardform.save(commit=False)
    forward.user = request.user.username
    forward.save()

请注意,您不需要检查if request.methof == 'POST',因为该表单仅对帖子请求有效。对于获取请求,表单未绑定因此无效。

答案 1 :(得分:-1)

这应该可以解决问题

def forwardthis(request):
    forwardform = AddUrlForm(request.POST or None)
    if forwardform.is_valid():
        forwardform.save(commit=False)
        forwardform.user = request.user.username
        forwardform.save()
    ...
    ...
    return HttpResponse(template.render(context,request))