2016-03-30 2 views
1

Mein Modellwie eine Eigenschaft aller Datensätze in django sqlite3

class Article(models.Model) : 
    title = models.CharField(max_length = 100) 
    category = models.CharField(max_length = 50, blank = True) 
    date_time = models.DateTimeField(auto_now_add = True) 
    content = models.TextField(blank = True, null = True) 

    def __unicode__(self) : 
     return self.title 

    class Meta: 
     ordering = ['-date_time'] 

erhalten, wie eine Liste enthält alle Kategorie zu machen und ohne Wiederholung?

die Syntax genau wie:

post_list = Article.objects.filter(category__iexact = tag) 
+0

diese 'set (Article.objects.filter (category__iexact = tag))' –

+0

_make eine Liste enthält alle category_ ... Möchten Sie alle möglichen Kategorien finden? – v1k45

+0

Sorry, aber ich bin nicht auf der Suche nach einer Kategorie__iexact = Tag, ich möchte alle Kategorie in einer Liste, ohne zu wiederholen –

Antwort

2

Sie values_list können alle Werte eines bestimmten Felds zu extrahieren.

category_list = Article.objects.values_list('category', flat=True) 

Um Duplikate aus der Liste zu entfernen:

categories = list(set(category_list)) 

oder als @Iain wies darauf hin, Sie .distinct()

category_list = Article.objects.values_list('category', flat=True).distinct() 
+2

Sie können 'distinct()' auf eine Werte-Liste statt 'list (set()) ' –

+0

aktualisiert die Antwort :) – v1k45

+0

Sie sind der Mann! Ich habe versucht, es in Django Doc zu suchen, aber ich kann es nicht machen, wenn ich den riesigen Doc in kurzer Zeit (▼ - ▼) –

0

Die Funktion, die Sie suchen ist distinct verwenden können. Da es in der Datenbank-Ebene filtern, sollte es schneller als Filter in Python-Code seines

post_list = Article.objects.filter(category__iexact = tag).distinct() 
+0

hinzufügen distinct(), nachdem es eine gute Idee ist! –

0

Für alle Kategorien, in denen mindestens ein Artikel vorhanden ist, können Sie tun:

Category.objects.filter(article_set__isnull=False).distinct() 

Dies wird auch geben Sie eine QuerySet, die Sie für weitere Abfragen im Gegensatz zu einer list verwenden können.

Verwandte Themen