Django模型中的request.user [英] request.user in Django model

查看:489
本文介绍了Django模型中的request.user的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using Django models to create the fields for a form. I would like to have the user's username automatically detected in and be filled out, this way I can hide it in my form (instead of having them choose their username from a long list that has everyones username). To do this I am using:

current_user = request.user

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

and then setting the default to current_user. However, I keep getting this error:

NameError: name 'request' is not defined

我假设您不能在Django模型中使用请求,但是仍然可以解决此问题吗?这是我的models.py文件的相关部分:

I'm assuming you can't use requests in Django models, but is there anyway to get around this? Here is the relevant sections of my models.py file:

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?

Anyone know how I can use requests in my models, or somehow call the variable current_user?

推荐答案

此处您尚未在该模型类范围内导入请求。这是获取用户的方式:

Here you haven't imported request in that model class scope. This is how you can get 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 ...

这篇关于Django模型中的request.user的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆