2017-02-05 3 views
0

Ich versuche, eine Website zu machen, wo Menschen ein Ereignis erstellen können, fügen Sie dann Bilder (von einem externen Album, nicht zum Hochladen), und dann möchte ich Informationen über Wie viele Bilder werden hinzugefügt und auf einem zentralen Katalog angezeigt. Zum Beispiel (ohne einige Code der Kürze halber):Anzahl der nicht leeren Felder in Django

models.py

class EventDB(models.Model): 
    picture1 = models.CharField ("picture 1", max_length=255, blank=True) 
    picture2 = models.CharField ("picture 2", max_length=255, blank=True) 

Wenn jemand einen Artikel zu EventDB und hinzugefügt 1 Bild hinzugefügt, konnte ich die Ausgabe als 1. zurückkehren, wenn sie 2 Bilder hinzugefügt , es würde als 2 zurückkehren und so weiter und so fort.

Ich möchte eine zentrale Seite haben, die alle Ereignisse auflistet und die entsprechende Anzahl von Bildern daneben hat. Zum Beispiel:

Event1 (2)

Event2 (1)

EVENT3 (4)

wo die Zahl in Klammern die Anzahl der Bilder ist. Was wäre der beste Weg, dies zu tun? Ich habe versucht, mit (picture1__isnull = True) .count() herumzuspielen, aber das zählt die GESAMTE Anzahl von Elementen in meiner DB ohne ein Bild1 hochgeladen.

Danke !!

Antwort

0

eine Eigenschaft hinzufügen oder eine Funktion, die die Gesamtzahl der Bilder für Sie zählt:

class EventDB(models.Model): 
    picture1 = models.CharField ("picture 1", max_length=255, blank=True) 
    picture2 = models.CharField ("picture 2", max_length=255, blank=True) 

    def picture_count(self): 
     fields = self._meta.get_fields() 
     n_count = len([ x for x in fields if getattr(self, field.name) ]) 
     return n_count  

Alternativ können Sie eine F Funktion schreiben, die die Anmerkung für Sie in der Datenbank tun. Die Syntax der Funktion hängt von Ihrer Datenbank ab.

Verwandte Themen