Request.user in a Django model

I am using Django models to create fields for a form. I would like the username to be automatically detected and populated, so I can hide it in my form (instead of choosing their username from a long list that has all the usernames). For this, I use:

current_user = request.user 

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

 NameError: name 'request' is not defined 

I assume you cannot use queries in Django models, but is there any way around this? Here are 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) 

Does anyone know how I can use queries in my models or somehow call the variable current_user?

+5
source share
1 answer

Here you did not import the query into this area of ​​the model class. Here is how you can get the user:

 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 model:

  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 .... 
+5
source

Source: https://habr.com/ru/post/1202034/


All Articles