2013-05-23 22 views
38

Mam dość prosty problem do rozwiązania. Mam modelu partnerskiego, który> = 0 Użytkownicy z nim związane:Django sprawdź, czy obiekt w polu ManyToMany

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

Teraz, jeśli mam obiekt użytkownika i mam przedmiot partnera, co jest najbardziej pythonowy sposobem sprawdzenia, czy użytkownik jest związany z Partner? Zasadniczo chcę instrukcji, która zwraca True, jeśli User jest powiązany z Partner.

Próbowałem:

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

To działa, ale mam wrażenie, że jest lepszy sposób. Dodatkowo, czy byłoby to łatwe do zrolowania w dekoratorze, mając na uwadze, że potrzebuję zarówno nazwanego parametru (slug), jak i obiektu żądania (user).

Każda pomoc będzie mile widziana.

Odpowiedz

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

Awesome. Wiedziałem, że istnieje mniej gadatliwy sposób. Dziękuję Ci. –

+0

Jak podnieść http403 w innym? Zwróć HttpResponseForbidden throws error – pythad

+0

Zgaduję, ponieważ nie widzę twojego pełnego kontekstu, ale wygląda na to, że próbujesz zwrócić klasę. Zamiast tego musisz go utworzyć: 'return HttpResponseForbidden()'. –