Django模型中的request.user

时间:2014-09-08 02:06:03

标签: python django django-models

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

1 个答案:

答案 0 :(得分:5)

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

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