我是python和Django的新手并且正在努力解决以下问题:
我有一个登录用户,用于填写包含2个字段(urlA和urlB)的表单。这两个字段以及时间戳和用户用户名应该存储在我的PSQL数据库中。
我目前的问题是urlA和urlB字段是在数据库中推送的,但是用户名保持为空或者我收到一个错误,即未定义self。
我在views.py中尝试了以下变体:
forwardform.user = request.user.username
User.objects.get(username=self.request.user) # -> gives error concering self
views.py
def forwardthis(request):
forwardform = AddUrlForm(request.POST or None)
if request.method == 'POST' and forwardform.is_valid():
forwardform.user = request.user.username
forwardform.save()
query_results = forwards.objects.all()
template = loader.get_template('forwardthis.html')
context = {
'forwardform': forwardform ,
'query_results':query_results
}
#output = ', '.join([p.user for p in query_results])
return HttpResponse(template.render(context,request))
models.py
class forwards(models.Model):
user = models.CharField(max_length = 150)
urlA = models.CharField(max_length = 254)
urlB = models.CharField(max_length = 254)
timestamp = models.DateTimeField('date created', auto_now_add=True)
forms.py
class AddUrlForm(forms.ModelForm):
class Meta:
model = forwards
# fields = '__all__'
exclude = ["user"]
答案 0 :(得分:1)
使用commit=False
保存表单,设置用户名,然后保存实例。
if forwardform.is_valid():
forward = forwardform.save(commit=False)
forward.user = request.user.username
forward.save()
请注意,您不需要检查if request.methof == 'POST'
,因为该表单仅对帖子请求有效。对于获取请求,表单未绑定因此无效。
答案 1 :(得分:-1)
这应该可以解决问题
def forwardthis(request):
forwardform = AddUrlForm(request.POST or None)
if forwardform.is_valid():
forwardform.save(commit=False)
forwardform.user = request.user.username
forwardform.save()
...
...
return HttpResponse(template.render(context,request))