Django模型中的request.user

9 投票
1 回答
15522 浏览
提问于 2025-04-20 08:59

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

current_user = request.user

然后把默认值设置为current_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这个变量?

1 个回答

9

在这个模型类里,你没有引入请求(request)。下面是获取用户的方法:

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

在视图(views)里:

def post(self, request):
   if form.is_valid():  
      form.save(request=request)
      return ...

撰写回答