【问题标题】:request.user in Django modelDjango 模型中的 request.user
【发布时间】:2014-09-08 02:06:02
【问题描述】:

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

current_user = request.user

然后将默认设置为 current_user。但是,我不断收到此错误:

NameError: name 'request' is not defined

我假设你不能在 Django 模型中使用请求,但是有没有办法解决这个问题?这是我的 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)

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

【问题讨论】:

标签: python django django-models


【解决方案1】:

在这里,您还没有在该模型类范围内导入请求。这是获取用户的方法:

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

对于模型形式:

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

【讨论】:

  • 好的,我已将def save 位添加到我的models.py,但我不完全确定在哪里添加视图代码。 Here 是我的相关views.py 文件。代码究竟会去哪里?
  • 非常有帮助,谢谢 - 需要设置 message.. 虽然也许我应该在 post_save 中这样做......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2011-05-17
  • 2011-11-20
  • 2012-03-24
  • 2021-03-03
  • 2019-08-28
  • 2011-07-26
相关资源
最近更新 更多