首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保存不是表单一部分但在Django中是必需的字段

如何保存不是表单一部分但在Django中是必需的字段
EN

Stack Overflow用户
提问于 2009-07-15 13:05:53
回答 3查看 749关注 0票数 1

我有一个模型,其中有一个字段是必需的,但不是由用户输入的,并且我很难在没有错误的情况下保存模型。我的模型定义如下:

代码语言:javascript
复制
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来创建和验证表单。但是,当我尝试保存此表单的结果时...

代码语言:javascript
复制
  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的属性,然后保存对象,我就可以做到这一点,但显然它不起作用。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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:这应该可以解决你的问题:

代码语言:javascript
复制
goal = Goal(author='Mr') #example
data = GoalForm(data=self.request.POST, instance=goal)
票数 2
EN

Stack Overflow用户

发布于 2009-11-19 06:18:07

我意识到这是一个古老的问题,但为了让其他人也能找到类似的答案,我发布了以下内容:

除非我没有这样做是有原因的,但我相信这就是你所需要的:

代码语言:javascript
复制
class Goal(db.Model):
  author = db.UserProperty(auto_current_user_add=True)
  ...
  ...

参考:Types and Property Classes:class UserProperty()

票数 1
EN

Stack Overflow用户

发布于 2009-07-15 13:09:13

您的GoalForm应该继承自django.forms.ModelForm,并定义为只需要一些字段:

代码语言:javascript
复制
class GoalForm(django.forms.ModelForm):
    class Meta:
        model = Goal
        fields = ('description', 'etc')

不过,我不确定这是否完全适用于AppEngine。

您还应该保存表单(仍然不确定AppEngine):

代码语言:javascript
复制
data = GoalForm(data=self.request.POST)

if data.is_valid():
  data.author = users.get_current_user()
  data.put()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1131285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档