/ / OR v django dotazoch databázy - mysql, django, django-modely, django-formuláre

ALEBO v databázových django dotazoch - mysql, django, django-modely, django-formuláre

Mám model, ktorý má 3 BooleanFields a jachcete použiť formulár zaškrtávacieho políčka na dotaz databázy. Výstupom by mali byť všetky položky v tabuľke, ktoré obsahujú ako aspoň jedno z polí, ktoré boli začiarknuté. Práve teraz mám niečo takéto:

f=mform.cleaned_data["F"]
h=mform.cleaned_data["H"]
s=mform.cleaned_data["S"]
course_list=[]
course_list=Course.objects.filter(Q(F=f)|Q(H=h)|Q(S=s))

Ale to jednoznačne nefunguje, pretože vždy vráti celý stôl. V podstate chcem získať všetky záznamy o kurzoch, kde je jedno z týchto polí pravdivé. Nejaké nápady?

odpovede:

1 pre odpoveď č. 1

Dotaz: "vyberte všetky záznamy o kurzoch, kde (F je pravda alebo H je pravda alebo S je pravda)"

q_filter = Q()

if mform.cleaned_data["F"]:
q_filter |= Q(F=True)
if mform.cleaned_data["H"]:
q_filter |= Q(H=True)
if mform.cleaned_data["S"]:
q_filter |= Q(S=True)

if q_filter:
course_list = Course.objects.filter(q_filter)
else:
course_list = Course.objects.none()

To je celkom základný prístup. Dalo by sa to robiť v jednej chytľavej slučke, ale chcel som tu jasne povedať. Vytvárame objekt Q v priebehu času. Vo vašom príklade filtrujete hodnoty, ktoré môžu byť pravdivé alebo nepravdivé, zatiaľ čo ste povedali, čo chcete, je iba filtrovať záznamy, ktoré majú dané pole s hodnotou True.