django登录用户配置文件和相关附加表单
我对如何在Django中向登录用户附加附加表单有疑问。 我希望该附加表单属于登录用户,并且我在表单中输入的数据应位于登录用户表下。我是Django和python新手,请耐心等待,我希望我能正确地解释我想用它做什么 我将为此视图输入的数据将进入“仅登录用户”下基本上我想将此视图附加到“已登录用户”下我得到的唯一错误是 异常值: 注册\ todos.user\ id不能为空django登录用户配置文件和相关附加表单,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我对如何在Django中向登录用户附加附加表单有疑问。 我希望该附加表单属于登录用户,并且我在表单中输入的数据应位于登录用户表下。我是Django和python新手,请耐心等待,我希望我能正确地解释我想用它做什么 我将为此视图输入的数据将进入“仅登录用户”下基本上我想将此视图附加到“已登录用户”下我得到的唯一错误是 异常值: 注册\ todos.user\ id不能为空 #models class userProfile(models.Model): user = models.One
#models
class userProfile(models.Model):
user = models.OneToOneField(User)
birth =models.DateField()
name = models.CharField(max_length=100)
def __unicode__(self):
return self.name
class todos(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100)
created = models.DateField()
time = models.TimeField()
def __unicode__(self):
return unicode(self.user)
#forms additional form for todos
class formtodos(ModelForm):
title = forms.CharField(label=(u'Todo'))
created = forms.DateField(label=(u'Date'))
time = forms.TimeField(label=(u'Time'))
#user = forms.CharField(label=(u'username'))
class Meta:
model = todos
exclude=('user',)
#view
def modeltodo(request):
if request.user.is_authenticated():
todos.objects.filter(user=request.user)
if request.method == 'POST':
form =formtodos(request.POST)
if form.is_valid():# All validation rules pass
todoss = form.save(commit=False)
todoss.created_by = request.user
form.save()
return HttpResponseRedirect('/profile/')
else:
form = formtodos() # An unbound form
context = {'form':form}
return render_to_response('todo.html', context, context_instance=RequestContext(request))
您已经在表单中指定了
exclude=('user',)
。这意味着,当您尝试保存表单时,不存在导致错误的用户id
。您可能希望将其放在save()之前
call:todoss.user=request.user
非常感谢这让我很沮丧,因为我错过了这个:)你能提供一些文档链接让我很容易理解这个概念吗:)好的,你需要的一切都应该在django文档中:基本上,表单中的字段将1-1映射到你的属性模型当您为todoss对象创建表单时(顺便说一句,您应该使用标准命名约定并将其更改为Todo),您排除了user
字段(显然您希望这是request.user
,并且不希望用户能够更改此字段)。但是,当您运行form.save()
时,表单缺少导致错误的用户数据。提供此选项可以避免错误。