2010-11-21 83 views
2

創建博客時,我正在使用以下模型類和表單。但由於我不希望用戶添加URL(slugified字段),我自己卡住了,我怎麼能添加slugified保存模型之前的url,如果我是正確的,它應該在視圖中完成。 PS:我正在使用應用程序引擎,我聽說slug字段不可用。如何添加slugified字段

class Post(db.Model): 
      title=db.StringProperty(required=True) 
      url=db.StringProperty(required=True) 
      content_html=db.TextProperty(required=True) 
      dateTime=db.DateTimeProperty(auto_now_add=True,required=True) 
      tags=db.StringListProperty() 


class PostForm(djangoforms.ModelForm): 
class Meta: 
    model=Post 
    exclude=['url'] 
+0

嘗試以HTTP://www.smipple達網絡/片斷/ brettsky/SlugProperty%20for%20App%20Engine%20based%20on%20Django%-27%20SlugField – sunn0 2010-11-21 15:55:51

回答

2

您可以在您的視圖中執行此操作或覆蓋表單的保存方法。如果您在您的視圖做它會是這個樣子:

#views.py 
from django.template.defaultfilters import slugify 

def post_create(request, ...): 
    ... 
    if request.method == 'POST': 
     form = PostForm(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      title = form.cleaned_data['title'] 
      slugified_title = str(slugify(title)) 
      post.url = [modify the slugified_title however you want...] 
      post.save() 
    ... 

或者,您也可以覆蓋表單的保存方法,它看起來是這樣的:

#forms.py 
class PostForm(django.forms.ModelForm): 
    class Meta: 
     model=Post 
     exclude=['url'] 
    def save(self, commit=True, force_insert=False, force_update=False): 
     post = super(PostForm, self).save(commit=False) 
     slugified_title = str(slugify(post.title)) 
     post.url = [modify the slugfield_title however you want...] 
     post.save()