我有一个模型,其中包含一个需要但不是由用户输入的字段,我很难保存模型而没有错误。我的模型定义如下:
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添加属性,然后保存对象将允许我这样做但显然它不起作用。有什么想法吗?
答案 0 :(得分:2)
请注意,如果表单中的数据未验证
,save()将引发ValueError
您可以在此处找到有关save()方法的所需信息:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method
编辑:而不是goal.put(),执行goal.save()
编辑2:这可以解决您的问题:
goal = Goal(author='Mr') #example
data = GoalForm(data=self.request.POST, instance=goal)
答案 1 :(得分:1)
我意识到这是一个老问题,但为了寻找类似答案的其他人,我发布了以下内容:
除非我因为没有这样做而错过了,但我相信这就是你所需要的:
class Goal(db.Model):
author = db.UserProperty(auto_current_user_add=True)
...
...
答案 2 :(得分:0)
你的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()