2010-11-21 1 views
2

при создании блога я использую следующий класс модели и форму. Но так как я не хочу, чтобы пользователь добавлял url (slugified field) сам я застрял, как я могу добавить slugified url перед сохранением модели, должно ли это быть сделано в представлении, если я прав. PS: Я использую движок приложения, где я слышал, что поля пули недоступны.как добавить 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

Try HTTP .net/фрагмент/brettsky/SlugProperty% 20for% 20App% 20Engine% 20based% 20on% 20Django% 27s% 20SlugField – sunn0

ответ

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() 
    ... 

В качестве альтернативы, вы можете переопределить вашей формы, кроме метода, который будет выглядеть примерно так: //www.smipple:

#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() 

 Смежные вопросы

  • Нет связанных вопросов^_^