2017-07-12 37 views
1

我是新来的Python和Django和与以下问题挣扎:我怎样才能获得的用户名登录的用户在Django的views.py

我有一个登录在完成与形式的用户2个字段(urlA和urlB)。这两个字段以及时间戳和用户名应该存储在我的PSQL数据库中。

我目前的问题是,urlA和urlB字段被推入数据库,但用户名保持空或我得到一个错误,自我没有定义。

我已经试过follwoing内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"] 
+0

'User.objects.get(用户名= request.user.username)' – Ykh

回答

1

保存与commit=False的形式,设置用户名,然后保存实例。

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

注意你不需要检查if request.methof == 'POST',因为形式只适用于POST请求。对于获取请求,表单无效因此无效。

+0

嗨麦金太尔,它的工作!只是我改变了以下内容:'forward.user = request.user.username'为了使它像Sumeet建议的那样工作。感谢您的帮助 – radzia2

+0

良好的捕获,现在修复。 – Alasdair

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

因此,这并没有奏效,因为输出“request.user.username”不能直接保存到forwardform.user中。我不得不使用一个(我假设称之为)变量转发,以保存这个。但是'forwardform.user'让我想到把它改成'forward.user'并且它解决了 – radzia2

相关问题