2017-10-20 2 views
0

Ich möchte Benutzerbeiträge verwalten. Wenn jemand einen neuen Beitrag erstellt, sollte er auf admin, aber nicht auf html angezeigt werden. Wenn der Inhalt gültig ist, möchte ich die Taste push on allow drücken und sie wird auf html für alle Benutzer angezeigt. Ich habe versucht, etwas zu googeln, aber nichts hilfreiches. Ich nehme an, Logik muss so sein:Wie man Benutzerinhalte in django verwaltet?

  1. Benutzer erstellen neuen Beitrag.
  2. Beitrag im Admin-Panel angezeigt.
  3. Admin erlauben den Beitrag.
  4. Post in HTML angezeigt.

Wie sollte es funktionieren?

+2

boolean Feld hinzufügen is_draft Standard false [BooleanField] (https://docs.djangoproject.com/en/1.11/ref/models/fields/#booleanfield) 'models.BooleanField (default = False)' –

Antwort

1

Der Kommentar von Bear Brown in Code.

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

Abfrage über z.B. Django Schale:

Post.objects.filter(is_draft=False) 

managers.py zusätzliche Filter nur zurückzukehren Objekte mit einem pub_date, die niedriger ist als oder gleich dem aktuellen Datum:

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 

Vorlage:

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

Ja Manager, es ist eine gute Idee – Anton

0

Das Hinzufügen eines is_published Felds zu Ihrem Modell ist eine schnelle Lösung, wenn Sie nur dieses benötigen und Sie wissen, dass Sie in Zukunft nichts anderes benötigen werden (zum Beispiel needs_editing). In den meisten Fällen multiplizieren sich diese Bedürfnisse schnell und Sie geraten in einen Teufelskreis komplizierten Codes, der nicht einfach zu befolgen ist.

Django-FSM ist ein Modul, das genau mit diesem Problem in einer sauberen und trockenen Weise anpackt. Eine nette Einführung kann here gefunden werden.

Auf jeden Fall vermeiden ...

Boolesche Werte für Staaten

is_new 
is_active 
is_published 
is_draft 
is_deleted 
is_paid 
is_member 
is_* 

Unvereinbare Staaten ... Art endlich, aber die Anzahl der Zustände steigt mit jedem Bool:

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

Spröde und zu viele Zustände zu überprüfen.