Django模型中的request.user [英] request.user in Django model
问题描述
我正在使用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屋!