我正在使用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?
答案 0 :(得分:5)
您尚未在该模型类范围内导入请求。这是你如何获得用户:
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()
在观点中:
def post(self, request):
if form.is_valid():
form.save(request=request)
return ....