簡體   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