Google app engine 自动填充字段,GAE上的Django表单

Google app engine 自动填充字段,GAE上的Django表单,google-app-engine,django-forms,Google App Engine,Django Forms,我和你一起工作 我想从用户提交的标题中自动生成一个slug,然后我想验证它是否存在。蛞蝓不必是唯一的,它只需要存在 如果标题不存在,只需设置title属性将导致验证错误,但如果标题类似于###?,则我的slug将是一个空字符串 建议使用模型的save方法,但save方法是在验证完成后调用的——因此,只有在对已知将变成有效段塞的字段进行段塞时,该方法才有效 我尝试过两种解决方案,但没有一种对我有吸引力,我相信有更好的方法 弗斯特 在title字段的clean方法中,我对标题进行了段塞,然后在未生成

我和你一起工作

我想从用户提交的标题中自动生成一个slug,然后我想验证它是否存在。蛞蝓不必是唯一的,它只需要存在

如果标题不存在,只需设置
title
属性将导致验证错误,但如果标题类似于###?,则我的slug将是一个空字符串

建议使用模型的
save
方法,但
save
方法是在验证完成后调用的——因此,只有在对已知将变成有效段塞的字段进行段塞时,该方法才有效

我尝试过两种解决方案,但没有一种对我有吸引力,我相信有更好的方法

弗斯特 在
title
字段的
clean
方法中,我对标题进行了段塞,然后在未生成有效段塞的情况下引发
ValidationError
。这很有效,可能是目前为止我最好的选择

问题是我必须在模型的
save
方法中再次对标题进行段塞,以便为段塞字段生成一个值。这感觉有点脏

秒 我用小部件
forms.HiddenInput
隐藏了
slug
字段,然后在收到post数据并检查表单是否有效之前,将
slug
字段的值设置为生成的slug

不幸的是,当slug在这个场景中不存在时,会弹出一个类似这样的错误:
(隐藏字段slug)我的自定义错误消息。
Django将第一部分(括号中的内容)附加到我完美的错误消息后面

为了解决这个问题,我将表单发送到我的模板中,如下所示:
form.as_p().replace(“隐藏字段slug)”,“”)

但是,再一次,这感觉有点脏

--- 谢谢你的帮助

您可以使用来自aetycoon的:

class Story(db.Model):
    title = db.StringProperty(required=True)
    slug = db.StringProperty(required=True)

但是,如果生成的slug是空字符串,我应该在哪里返回错误呢?如果我实现TransformProperty并将slug字段隐藏为必需字段,那么在第二种方法中仍然存在问题。(感谢你的帮助,尼克;你真的做得很好,能跟上每一件事。这太神奇了)使用TransformProperty,你可以采用第一种方法,将其设置为required,如果slug为空,它将抛出一个错误。
class Story(db.Model):
    title = db.StringProperty(required=True)
    slug = aetycoon.TransformProperty(title, slugify, required=True)