как добавить загустевшее поле - PullRequest
2 голосов
/ 21 ноября 2010

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

  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']

1 Ответ

2 голосов
/ 21 ноября 2010

Вы можете сделать это в своем представлении или переопределить метод сохранения формы.Если вы сделаете это, по вашему мнению, это будет выглядеть примерно так:

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