Django模型中的request.user

9

我正在使用 Django 模型创建表单字段。我希望能够自动检测并填写用户的用户名,这样我就可以将其隐藏在我的表单中(而不是让他们从长长的包含所有人用户名的列表中选择他们的用户名)。为此,我正在使用以下代码:

current_user = request.user

然后将默认值设置为当前用户,但我一直收到以下错误提示:
NameError: name 'request' is not defined

我假设在Django模型中无法使用requests,但有没有方法可以解决这个问题?以下是我的models.py文件的相关部分:

class StockTickerSymbol(models.Model):
    StockName = models.CharField(max_length=7, unique=True)
    current_user = request.user
    user = models.ForeignKey(User, default=current_user)

有人知道我如何在我的模型中使用requests,或以某种方式调用变量current_user吗?


相关或重复:使模型中的用户默认为当前用户 - alecxe
2
在Python中,除非某些东西被传递给它,否则你无法在任何地方使用任何东西 - Daniel Roseman
1个回答

9

在该模型类作用域中,您还没有导入请求。以下是获取用户的方法:

# model

class StockTickerSymbol(models.Model):
    StockName = models.CharField(max_length=7, unique=True)
    user = models.ForeignKey(User)

    def save(self,**kwargs):
      if kwargs.has_key('request') and self.user is None:
            request = kwargs.pop('request')
            self.user= request.user
      super(StockTickerSymbol, self).save(**kwargs)

#views:

def post(self, request):
   if form.is_valid():                         
       sts=StockTickerSymbol()
       sts.StockName= form.cleaned_data['StockName']
       if form.cleaned_data['user'] is None: #null check
          sts.save(request=request)
       else:
          sts.user= form.cleaned_data['user']
          sts.save(request=request)

关于modelform:

class SomeForm(forms.ModelForm):
    ...

    def save(self, commit=True ,*args, **kwargs):
        request = None
        if kwargs.has_key('request'):
            request = kwargs.pop('request')
        m = super(SomeForm, self).save(commit=False, *args, **kwargs)
        if m.user is None and request is not None:
            m.user= request.user
            m.save()

在视图中:
def post(self, request):
   if form.is_valid():  
      form.save(request=request)
      return ...

好的,我已经在我的models.py中添加了def save部分,但我不确定应该在哪里添加视图代码。这里是我相关的views.py文件。请问代码应该放在哪里? - ng150716
非常有帮助,谢谢 - 需要请求设置“message”.. 不过也许我应该在“post_save”中完成... - ptim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接