2016-07-27 92 views
0

我創建簡單的博客和麪對問題。我需要在Django管理頁面中有單獨的文章類型,這些文章將被保存,但不會在網站上顯示。例如,當有人建議發佈帖子時,我首先要閱讀它,然後發佈,或者當我正在撰寫帖子,並且想在一段時間後繼續閱讀時,我需要保存它。在django管理頁面顯示帖子,但不在網站

博客/ 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 

博客/ 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) 

博客/ views.py

class PostsListView(ListView): 
    model = Post 
+0

在您的看法中,您可以限制查詢,以便僅顯示發佈的帖子,例如'Post.object.filter(published = True)'。您尚未展示您的觀點,因此很難更具體。 – Alasdair

+0

是的,謝謝,以及如何爲未發佈的帖子製作單獨的字段? – Rodion

+0

我不明白你的問題。您的模型中已經有一個布爾字段'published'。 – Alasdair

回答

0

您可以通過修改列表視圖,僅顯示已發佈通過覆蓋get_queryset發佈。

class PostsListView(ListView): 
    model = Post 

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

如果你有一個詳細視圖,你應該以同樣的方式覆蓋get_queryset

在您的模型管理員中,您可以將published添加到list_filter。這可以很容易地過濾已發佈/未發佈的帖子。

class PostAdmin(admin.ModelAdmin): 
    ... 
    list_filter = ['pub_date', 'published'] 
相關問題