我有一个模型,其中有一个字段是必需的,但不是由用户输入的,并且我很难在没有错误的情况下保存模型。我的模型定义如下:
class Goal(db.Model):
author = db.UserProperty(required=True)
description = db.StringProperty(multiline=True, required=True)
active = db.BooleanProperty(default=True)
date = db.DateTimeProperty(auto_now_add=True)
class GoalForm(djangoforms.ModelForm):
class Meta:
model = Goal
exclude = ['author', 'active']我在appengine中使用django-forms来创建和验证表单。但是,当我尝试保存此表单的结果时...
def post(self):
data = GoalForm(data=self.request.POST)
if data.is_valid():
goal = data.save(commit=False)
goal.author = users.get_current_user()
goal.put()
self.redirect('/')我得到"ValueError:无法创建目标(需要属性作者)“
现在我认为,通过拥有commit=False,然后添加Goal的属性,然后保存对象,我就可以做到这一点,但显然它不起作用。有什么想法吗?
发布于 2009-07-15 13:10:22
注意,如果表单中的数据没有经过验证,ValueError ()将引发一个保存
您可以在这里找到关于save()方法所需的内容:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method
编辑:用代替goal.put(),执行goal.save()
Edit2:这应该可以解决你的问题:
goal = Goal(author='Mr') #example
data = GoalForm(data=self.request.POST, instance=goal)发布于 2009-11-19 06:18:07
我意识到这是一个古老的问题,但为了让其他人也能找到类似的答案,我发布了以下内容:
除非我没有这样做是有原因的,但我相信这就是你所需要的:
class Goal(db.Model):
author = db.UserProperty(auto_current_user_add=True)
...
...参考:Types and Property Classes:class UserProperty()
发布于 2009-07-15 13:09:13
您的GoalForm应该继承自django.forms.ModelForm,并定义为只需要一些字段:
class GoalForm(django.forms.ModelForm):
class Meta:
model = Goal
fields = ('description', 'etc')不过,我不确定这是否完全适用于AppEngine。
您还应该保存表单(仍然不确定AppEngine):
data = GoalForm(data=self.request.POST)
if data.is_valid():
data.author = users.get_current_user()
data.put()https://stackoverflow.com/questions/1131285
复制相似问题