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

Python 如何在Django views.py中获取登录用户的用户名,python,django,Python,Django,我不熟悉python和Django,正在努力解决以下问题: 我有一个登录用户,他用两个字段(urlA和urlB)填写表单。这两个字段以及时间戳和用户用户名应该存储在我的PSQL数据库中 我当前的问题是在数据库中推送urlA和urlB字段,但用户名保持为空,或者我得到一个未定义self的错误 我尝试了以下几种不同的inside views.py: forwardform.user = request.user.username User.objects.get(username=self.req

我不熟悉python和Django,正在努力解决以下问题:

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

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

我尝试了以下几种不同的inside views.py:

forwardform.user = request.user.username 
User.objects.get(username=self.request.user) # -> gives error concering self
视图.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))
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)
class AddUrlForm(forms.ModelForm):

    class Meta:
        model = forwards
        # fields = '__all__'
        exclude = ["user"]
型号.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))
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)
class AddUrlForm(forms.ModelForm):

    class Meta:
        model = forwards
        # fields = '__all__'
        exclude = ["user"]
forms.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))
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)
class AddUrlForm(forms.ModelForm):

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

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

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

注意:如果request.methof==“POST”,则不需要检查
,因为表单仅对POST请求有效。对于get请求,表单未绑定,因此无效

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

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

注意:如果request.methof==“POST”
,则不需要检查
,因为表单仅对POST请求有效。对于get请求,表单未绑定,因此无效

这应该能奏效

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

这应该能奏效

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

User.objects.get(username=request.User.username)
User.objects.get(username=request.User.username)
你好,阿拉斯代尔,一切顺利!我唯一改变的是如下内容:
forward.user=request.user.username
,以使它像Sumeet建议的那样工作。谢谢你的帮助好的渔获量,现在修好了。嗨,阿拉斯代尔,成功了!我唯一改变的是如下内容:
forward.user=request.user.username
,以使它像Sumeet建议的那样工作。感谢您的帮助好的捕获,现在已修复。因此,由于无法将输出“request.user.username”直接保存到forwardform.user中,因此此问题无法解决。为了保存这个变量,我不得不使用一个(我假设它叫做)变量forward。但是,
forwardform.user
让我想把它改成
forward.user
,结果成功了,因为输出“request.user.username”无法直接保存到forwardform.user中。为了保存这个变量,我不得不使用一个(我假设它叫做)变量forward。但是
forwardform.user
让我想把它改成
forward.user
,结果成功了