2009-04-08 16 views
0

Dies ist wahrscheinlich eine schöne n00b Frage, aber ich kann es nicht zur Arbeit bekommen.django querieset: Wählen Sie mit auth_user verbinden

Wenn ich folgendes Modell haben:

from django.contrib.auth.models import User 

class Entry(models.Model): 
    title = models.CharField() 
    users = models.ManyToManyField(User) 

Wie würde ich eine Liste aller Einstiegs-Titel des aktuell angemeldeten Benutzers erhalten? Etwas wie:

list = Entry.objects.filter(users__????__contains = request.user) 

?

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

3

Aus der Spitze von meinem Kopf, ich glaube, es entlang der Linien sein könnte:

list = Entry.objects.filter(users__id__exact = request.user.pk) 

oder

list = Entry.objects.filter(users = request.user) 

Ich glaube, entweder von denen, funktionieren soll. Weitere Informationen zu many to many relationships finden Sie in den Django-Dokumenten.

+0

über das Fehlen der offensichtlichen zu sprechen, danke für die Einsicht –

1

Sie sollten in der Lage sein, dies zu tun mit:

Entry.objects.filter(users=request.user) 

Django wird die mit dem M2M Tisch sitzen richtig sortieren, und fügen Sie den aktuellen Benutzer eine WHERE-Klausel zu begrenzen.

1
Entry.objects.filter(users=request.user) 

Und es ist ein Fehler in Ihrem Code. CharField erfordert max_length.

+0

nette Beobachtung, ich entfernte es, um das Beispiel zu entwirren, ohne darüber nachzudenken –

2

Ich finde das Folgende, um eleganter zu sein, aber es liegt an Ihnen.

BEARBEITEN: Sie sollten die Entry-Modellklasse nicht jedes Mal importieren müssen, wenn Sie nach Einträgen für einen Benutzer suchen möchten. Die Verwendung von user.entry_set vermeidet diesen Aufwand.

Verwandte Themen