简体   繁体   English

Django 模型中的 request.user

[英]request.user in Django model

I am using Django models to create the fields for a form.我正在使用 Django 模型为表单创建字段。 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

and then setting the default to current_user.然后将默认值设置为 current_user。 However, I keep getting this error:但是,我不断收到此错误:

NameError: name 'request' is not defined

I'm assuming you can't use requests in Django models, but is there anyway to get around this?我假设您不能在 Django 模型中使用请求,但是有没有办法解决这个问题? Here is the relevant sections of my models.py file:这是我的 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)

Anyone know how I can use requests in my models, or somehow call the variable current_user?任何人都知道我如何在我的模型中使用请求,或者以某种方式调用变量 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)

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

in views:在视图中:

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