Django模型中的request.user
我正在使用Django的模型来创建表单的字段。我希望能够自动检测到用户的用户名,并把它填上,这样我就可以在表单中隐藏这个字段(而不是让他们从一个包含所有人用户名的长列表中选择)。为此,我使用了:
current_user = request.user
然后把默认值设置为current_user。但是,我总是收到这个错误:
NameError: name 'request' is not defined
我在想,可能在Django模型中不能使用requests,但有没有什么办法可以解决这个问题?这是我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)
有没有人知道我怎么才能在模型中使用requests,或者以某种方式调用current_user这个变量?
1 个回答
9
在这个模型类里,你没有引入请求(request)。下面是获取用户的方法:
# 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)
对于模型表单(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()
在视图(views)里:
def post(self, request):
if form.is_valid():
form.save(request=request)
return ...