Saya ingin menulis permintaan Django yang setara dengan permintaan SQL ini:
SELECT * from user where income >= 5000 or income is NULL.
Bagaimana cara membangun filter queryset Django?
User.objects.filter(income__gte=5000, income=0)
Ini tidak berfungsi, karena itu AND
saringan. Saya ingin OR
filter untuk mendapatkan gabungan dari masing-masing kueri.
Jawaban:
melalui Dokumentasi
sumber
Karena QuerySets mengimplementasikan
__or__
operator Python (|
), atau gabungan, itu hanya berfungsi. Seperti yang Anda harapkan, para|
operator biner mengembalikanQuerySet
begituorder_by()
,.distinct()
dan filter queryset lainnya dapat tertempel pada akhir.Pembaruan 2019-06-20: Ini sekarang sepenuhnya didokumentasikan dalam referensi Django 2.1 QuerySet API . Diskusi yang lebih bersejarah dapat ditemukan di tiket DjangoProject # 21333 .
sumber
Kedua opsi sudah disebutkan dalam jawaban yang ada:
dan
Namun, tampaknya ada beberapa kebingungan mengenai mana yang lebih disukai.
Intinya adalah bahwa mereka identik pada tingkat SQL , jadi jangan ragu untuk memilih mana yang Anda suka!
The Django ORM Cookbook berbicara secara rinci tentang ini, ini adalah bagian yang relevan:
mengarah ke
dan
mengarah ke
sumber: django-orm-cookbook
sumber