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字段生成一个值。这感觉有点脏。
我使用小部件slug
隐藏了forms.HiddenInput
字段,然后在接收到帖子数据后将slug
字段的值设置为生成的子句 em>在检查以确定表单是否有效之前。
不幸的是,当在这种情况下不存在slug时会弹出一个如下所示的错误:(Hidden field slug) My custom error message.
Django将第一部分(括号中的内容)附加到我完全正确的错误消息中。
为了解决这个问题,我将表单发送到我的模板:form.as_p().replace("Hidden field slug) ", "")
但是,再一次,这感觉有点脏。
感谢您的帮助!
答案 0 :(得分:3)
你可以使用来自aetycoon的TransformProperty:
class Story(db.Model):
title = db.StringProperty(required=True)
slug = aetycoon.TransformProperty(title, slugify, required=True)