2017-07-09 2 views
0

Ich arbeite an einem Blog. Ich habe einen Bereich, in dem es einen speziellen Beitrag geben wird. Und noch eine Seite, auf der ich eine Sammlung von Sonderbeiträgen habe. Hier ist meine model.pyDjango Auswahlmöglichkeiten. Wie stelle ich eine Option so ein, dass sie nur einmal ausgewählt wird

class Post(models.Model): 
    post = models.TextField() 
    SPECIAL = (
     ('0', 'Special Post'), 
     ('1', 'General Post'), 
     ('2', 'Inactive Special Post'), 
    ) 
    specialpost = models.CharField(max_length=1, choices=SPECIAL, default='1',) 

Nur ein Beitrag im Sonderpost sein sollte. Wenn ein neuer Sonderposten hinzugefügt wird, sollte der alte Sonderposten in Inaktiver Sonderposten verschoben werden. So kann es in der Sammlung der speziellen Post-Seite angezeigt werden. Wie kann ich das machen?

+0

Überschreibung Speichermethode von django Modell hinzufügen für diese –

Antwort

1

Da @ neeraj-kumar im Kommentar erwähnt wird, können Sie dies erreichen, indem Sie die save() Methode des Modells überschreiben. In der Klasse, so etwas zu veröffentlichen:

class Post(models.Model): 
    ... 

    def save(self, *args, **kwargs): 
     special_post = Post.objects.filter(specialpost='0') 
     if self.specialpost == '0' and special_post: 
      special_post.update(specialpost='2') 
     super(Post, self).save(*args, **kwargs) 
+1

Die neuen bearbeiten Werke Aufgabe zu tun. Hier ist das, was ich benutze: 'def speichern (self, * args, ** kwargs): wenn self.specialpost == '0': special_post = Post.objects.filter (propic = '0') wenn special_post: special_post.update (specialpost = '2') super (Post, selbst) .save (* args, ** kwargs) ' –

0

, wenn Sie einen neuen Beitrag hinzufügen, filtern Sie die Abfrage wie diese change_actual_post = Post.objects.get(specialpost=0) und dann den Status Ihrer alten Post ändern change_actual_post.specialpost = 2 schließlich change_actual_post.save() speichern.

diese drei Zeilen in views.py Datei hinzufügen, bevor eine neue Sonderpost

Verwandte Themen