2016-07-27 12 views
0

Ich erstelle einfache Blog und Gesicht mit Problem. Ich brauche separate Arten von Posts in der Django Admin-Seite, die gespeichert werden, aber nicht vor Ort angezeigt werden. Zum Beispiel, wenn jemand einen Beitrag vorschlägt, möchte ich ihn zuerst lesen und danach veröffentlichen, oder wenn ich einen Beitrag schreibe und nach einiger Zeit weitermachen möchte, muss ich ihn speichern.Zeige Beitrag in Django Admin-Seite, aber nicht vor Ort

Blog/models.py

class Post(models.Model): 
    author = models.ForeignKey(User, default=1) 
    title = models.CharField(max_length = 50) 
    pub_date = models.DateTimeField(default=timezone.now) 
    content = models.TextField(max_length = 50000) 
    published = models.BooleanField(default=False) 

    def __str__(self): 
     return self.title 
    def get_absolute_url(self): 
     return "/blog/%i/" % self.pk 

Blog/admin.py

class PostAdmin(admin.ModelAdmin): 
    fieldsets = (
     ('Title', {'fields' : ['title']}), 
     ('Date', {'fields' : ['pub_date'], 'classes' : ['collapse']}), 
     ('Content', {'fields' : ['content']}), 
    ) 
    list_display = ('title', 'pub_date') 
    list_filter = ['pub_date'] 
    search_fields = ['title'] 

admin.site.register(Post, PostAdmin) 

Blog/views.py

class PostsListView(ListView): 
    model = Post 
+0

In Ihrer Sicht können Sie die Abfrage so beschränken, dass nur veröffentlichte Posts angezeigt werden, z. B. 'Post.object.filter (published = True) '. Du hast deine Sichtweise nicht gezeigt, daher ist es schwierig, genauer zu sein. – Alasdair

+0

Ja, danke, und wie separate Feld für unveröffentlichte Posts machen? – Rodion

+0

Ich verstehe deine Frage nicht. Sie haben bereits ein boolesches Feld in Ihrem Modell veröffentlicht. – Alasdair

Antwort

0

Sie können nur Ihre Listenansicht ändern zeigen veröffentlicht Beiträge durch Überschreiben get_queryset.

class PostsListView(ListView): 
    model = Post 

    def get_queryset(self): 
     return super(PostsListView, self).get_queryset().filter(published=True) 

Wenn Sie eine Detailansicht haben, sollten Sie get_queryset auf die gleiche Art und Weise außer Kraft setzen.

In Ihrem Modelladministrator können Sie published zu list_filter hinzufügen. Dies erleichtert das Filtern veröffentlichter/unveröffentlichter Posts.

class PostAdmin(admin.ModelAdmin): 
    ... 
    list_filter = ['pub_date', 'published'] 
Verwandte Themen