2010-11-21 6 views
2

beim Erstellen eines Blogs verwende ich die folgende Modellklasse und Form. Aber da ich nicht möchte, dass der Benutzer die URL (slugified Feld) selbst hinzufügt, bin ich fest, wie kann ich die Slugified hinzufügen URL vor dem Speichern des Modells, sollte es in der Ansicht getan werden, wenn ich richtig bin. PS: Ich benutze App-Engine, wo ich hörte, dass die Slug-Felder nicht verfügbar sind.wie man das slugified Feld hinzufügt

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: //www.smipple .net/snippet/brettsky/SlugProperty% 20für% 20App% 20Engine% 20basiert% 20auf% 20Django% 27s% 20SlugField – sunn0

Antwort

2

Sie können dies entweder in Ihrer Ansicht tun oder die Save-Methode Ihres Formulars überschreiben. Wenn Sie es Ihrer Ansicht nach tun wird es in etwa so aussehen:

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

Alternativ können Sie Ihre Form der Save-Methode außer Kraft setzen, die etwas aussehen würde:

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