如何管理django中的用户内容?

时间:2017-10-20 09:21:26

标签: python django

我想管理用户帖子。当有人创建新帖子时,它应该显示在管理员上,而不是显示在html上。如果内容有效,我想要按下允许按钮,它将在html上显示给所有用户。我试着谷歌的东西,但没有任何帮助。我认为逻辑必须是这样的:

  1. 用户创建新帖子。
  2. 发布在管理面板上。
  3. 管理员允许发布。
  4. 帖子以html显示。
  5. 它应该如何运作?

2 个答案:

答案 0 :(得分:1)

代码中Bear Brown的评论。

models.py

class Post(models.Model):
     title = models.CharField(max_length=100, unique=True)        
     content = models.TextField()
     is_draft = models.BooleanField(help_text='If checked article gets not published.', default=False)
     pub_date = models.DateField(default=timezone.now)

     objects = PublishedManager()

通过例如查询Django shell:

Post.objects.filter(is_draft=False)

managers.py其他过滤器只返回pub_date低于或等于当前日期的对象:

class PublishedManager(models.Manager):

    def published(self, **kwargs):
        return self.filter(pub_date__lte=timezone.now(),
                           is_draft=False,
                           **kwargs).order_by('-pub_date')

views.py

class PostListView(ListView):    
    model = Post

    def get_queryset(self):
        queryset = Post.objects.published()
        return queryset

模板:

{% for post in post_list %}
  <h1>{{ post.title }}</h1>
  {{ post.content }}
{% endfor %}

答案 1 :(得分:0)

如果您只需要这个并且您知道将来不需要任何其他内容(例如is_published),那么在您的模型中添加needs_editing字段是一种快速解决方案。大多数时候,这些需求会迅速增加,并且您会陷入复杂代码的恶性循环中,而这些代码并不容易理解。

Django-FSM是一个以干净和干燥的方式完全解决此问题的模块。可以找到一个很好的介绍here

  

绝对避免......

     

州的布尔人

is_new
is_active
is_published
is_draft
is_deleted
is_paid
is_member
is_*
     

相互排斥的状态......有点但有些状态   随着每个布尔增加:

2 bools = 2^2 = 4 states
3 bools = 2^3 = 8 states
etc (2^N)
     

脆弱且状态太多无法检查。