2013-05-23 19 views
38

Ich habe ein ganz einfaches Problem zu lösen. Ich habe Partner-Modell, das hat> = 0 Benutzer mit ihm verbunden:Django überprüfen, ob Objekt in ManyToMany Feld

class Partner(models.Model): 
    name = models.CharField(db_index=True, max_length=255) 
    slug = models.SlugField(db_index=True) 
    user = models.ManyToManyField(User) 

Nun, wenn ich ein User-Objekt haben und ich einen Partner zum Gegenstand haben, was ist die Pythonic Möglichkeit zu überprüfen, ob der Benutzer zugeordnet ist ein Partner? Ich möchte im Grunde eine Anweisung, die True zurückgibt, wenn die User mit der Partner verknüpft ist.

Ich habe versucht:

users = Partner.objects.values_list('user', flat=True).filter(slug=requested_slug) 
if request.user.pk in users: 
    # do some private stuff 

Dies funktioniert, aber ich habe das Gefühl, es einen besseren Weg gibt. Wäre es außerdem einfach, in einen Dekorateur zu rollen, wobei ich sowohl einen benannten Parameter (slug) als auch ein Anfrageobjekt (user) benötige.

Jede Hilfe würde sehr geschätzt werden.

Antwort

68
if user.partner_set.filter(slug=requested_slug).exists(): 
    # do some private stuff 
+0

Ehrfürchtig. Ich wusste, dass es einen weniger wortreichen Weg gab. Vielen Dank. –

+0

Wie erhöhe ich http403 in sonst? Return HttpResponseForbidden wirft Fehler – pythad

+0

Ich rate, da ich nicht Ihren vollständigen Kontext sehen kann, aber es sieht aus wie Sie versuchen, die Klasse zurückzugeben. Stattdessen müssen Sie es instanziieren: 'return HttpResponseForbidden()'. –

Verwandte Themen