我正在嘗試在我的代碼中實作自定義過濾并瀏覽了檔案。但我無法理解檔案中的以下片段。
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = ['username', 'last_login']
# or
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = {
'username': ['exact', 'contains'],
'last_login': ['exact', 'year__gt'],
}
檔案說我們可以使用第一個或第二個,但確切的區別是什么?contains 和 year_gt 是什么意思?
uj5u.com熱心網友回復:
確切的區別是什么?
使用fields = ['username', 'last_login'],生成的過濾器是:
qs.filter(username='some_value') 和 qs.filter(last_login=some_date_value)
和
fields = {
'username': ['exact', 'contains'],
'last_login': ['exact', 'year__gt'],
}
生成的過濾器是:
qs.filter(username='some_value'),qs.filter(username__contains='some_value')為username場。
qs.filter(last_login=some_date_value),qs.filter(last_login__year__gt=some_year_value)為last_login場。
所以我們第一次可以看到,第二個為每個欄位生成 2 個過濾器選項,第一個只exact match為給定值生成一個過濾器選項 ( )。
contains 和 year__gt 是什么意思?
contains用于按可以在欄位內找到的值進行過濾。例如:dj在django。
year__gt另一方面僅適用于日期欄位。當您有一個日期欄位時created,Django 允許您按year, month, dayby just do: 進行過濾.filter(created__year=2021, created__month=12)。.filter(created__year__gt=2020)這意味著創建欄位的年份 > 2020 的可能性更大。它可以應用于month__gt(month > 11), day__lt(day < 25)。
uj5u.com熱心網友回復:
檔案中也有django 查找檔案的鏈接,您會發現使用該鏈接可以通過使用第二個選項提高搜索/過濾效率。
檔案中的第一個選項 where fieldsis just a list 將對您列出的每個欄位進行精確匹配查詢。
在第二個選項中,過濾器庫將與fields字典一起使用“雙下劃線”符號來創建查找;
username__exactusername__containslast_login__exactlast_login__year__gt
您可以使用雙下劃線來訪問某物的屬性或查找型別。因此,last_login對于上面的最后一個示例,它將last_login取值的年份,并且該年份的查找型別大于 ( gt)。
有很多這些查找值對學習很有幫助。例如,contains區分大小寫,但您可以icontains用于不區分大小寫的匹配。還有lt小于,或lte/gte小于/大于或等于。在此處查看可用的查找。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370653.html
