在 Django 中執行此操作的正確方法是什么,我想過濾欄位具有特定值或為空的查詢集,這意味著如果我按名為“型別”的欄位過濾查詢集,它將回傳一個帶有物件的查詢集具有特定型別的值,例如“活動”,并且具有“型別”的物件具有空值。
uj5u.com熱心網友回復:
您可以為此使用Q物件 [Django-doc]:
MyModel.objects.filter(
Q(type='active') | Q(type=None)
)
在這里,我們將兩個Q物件組合在一起,它們充當過濾器和按位或運算子|,這意味著我們創建了一個過濾器,充當兩個過濾條件之間的邏輯或。
uj5u.com熱心網友回復:
我認為這是實作您的目標的最簡單的技術。
Model.objects.filter(Q(type='active') | Q(type=True))
uj5u.com熱心網友回復:
Django 檔案中有一整節與模型欄位查找相關。但是,如果您不想弄亂它,這里有一些示例:
# Obtaining all non-null fields
Model.objects.filter(some_field__isnull=False)
# Obtaining all rows with field value greater than some value
Model.objects.filter(some_field__isnull=False, some_field__gt=value)
# Actually the better way of writing complex queries is using Q objects
from django.db.models import Q
Model.objects.filter(Q(some_field__isnull=False) & Q(some_field__gt=value)) # The same thing as the previous example
# Using Q objects in this situation may seem useless and it kinda is, but as for me
# This improves readability of your query
您可能想對您的領域做更多的事情,但我認為我描述了最常見的用例。
編輯
正如在威廉的答案中所寫的那樣,為了獲取具有“活動”或 null 值的行,您應該撰寫這樣的查詢:
Model.objects.filter(Q(type='active') | Q(type__isnull=True))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/487020.html
標籤:Python django django-queryset django-orm
