Django .Filter na tej samej opcji z kilkoma funkcjami


Mam model obiektów. Mam również listę opcji do filtrowania wyników. Nie jestem pewien, czy istnieje prosty sposób filtrowania obiektów w modelu w taki sposób, aby każdy obiekt pasuje do dowolnego elementu na liście filtra. Na przykład:
# returns all users with name starting with 'P'
usersWithPName = User.objects.filter(name__startswith = 'P')
# 3 letters to filter User model with
filterList = ['P', 'T', 'R']
# ideally would return all users with name starting with either 'P', 'T', or 'R'
usersWithPTRName = User.objects.filter(name__startswith = filterList)

Czy istnieje sposób na odfiltrowanie (w tym przypadku) modelu niestandardowego, aby każdy obiekt pasujący do któregokolwiek z elementów w filterList został zwrócony?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Można to zrobić za pomocą

Q Obiekty
http://docs.djangoproject.com/ ... jects
from django.db.models import Q
usersWithPTRName = User.objects.filter(Q(name__startswith='P') |
Q(name__startswith='T') |
Q(name__startswith='R'))

Ponadto możesz utworzyć filtry Q podczas wykonywania:
filterList = ['P', 'T', 'R']
query = Q()
for letter in filterList:
query = query | Q(name__startswith=letter)
usersWithPTRName = User.objects.filter(query)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dwie opcje.
  • Uwzględnij pierwszą literę jako właściwość w swoim modelu.
  • Używaj bardziej złożonych zapytań.

Możesz to zrobić
class User( models.Model ):
... all the usual stuff ...
@property
def first_letter( self ):
return self.name[:1]

Teraz możesz filtrować za pomocą
filter (first_letter__in = ('P', 'T', 'R'))
Druga opcja Build Django
Q
Obiekty dla filtra.
Zacznij tutaj:

https://stackoverflow.com/search?q=django+Q+ obiektów
https://stackoverflow.com/sear ... jects

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się