繁体   English   中英

Django 模型中的 request.user

[英]request.user in Django model

我正在使用 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?

在这里,您尚未在该模型类范围内导入请求。 这是您如何获得用户:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM