自动填充的字段,GAang上的Django表单

时间:2009-12-10 14:11:07

标签: google-app-engine django-forms

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

我正在使用Django's forms on Google App Engine

我想从用户提交的标题中自动生成一个slug - 然后我想验证它是否存在。 slu is不一定是唯一的,它必须存在。

如果标题不存在,只需要使用title属性就会导致验证错误,但如果标题类似于 ### ??? 那么我的slug将会是一个空字符串。

This post建议使用模型的save方法,但在验证完成后调用save方法 - 因此只有在你知道将要重击的字段时它才有效变成有效的slu ..

我尝试了两种解决方案,但没有一种能吸引我,我相信有更好的方法可以做到。

第一

title字段的clean方法中,我对标题进行了细分,然后如果没有生成有效的slug则会提出ValidationError。这很好用,到目前为止它可能是我最好的选择。

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

Seccond

我使用小部件slug隐藏了forms.HiddenInput字段,然后在接收到帖子数据后将slug字段的值设置为生成的子句 em>在检查以确定表单是否有效之前。

不幸的是,当在这种情况下不存在slug时会弹出一个如下所示的错误:(Hidden field slug) My custom error message. Django将第一部分(括号中的内容)附加到我完全正确的错误消息中。

为了解决这个问题,我将表单发送到我的模板:form.as_p().replace("Hidden field slug) ", "")

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

---

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

你可以使用来自aetycoon的TransformProperty

class Story(db.Model):
    title = db.StringProperty(required=True)
    slug = aetycoon.TransformProperty(title, slugify, required=True)