我正在嘗試使用 Django 決議 JSON 資料庫并按月或按年過濾,這讓我陷入困境,因為這應該很簡單。
JSON 物件中 dict 鍵值對的示例格式如下:
"release_date": "2022-12-25T07:00:00",
從我的 views.py 檔案中,我設定了這個函式來過濾模型:
@api_view(['GET'])
def yearList(request,pk):
queryset = Character.objects.filter(release_date__year=pk)
serializer = CharacterSerializer(queryset, many=True)
return Response(serializer.data)
在我的 urls.py 中,我有這個 urlpattern(忽略所有其他模式)
urlpatterns = [
path('year/<str:pk>', views.CharacterList.as_view(), name="Character by year" )
]
根據要求來自 models.py 的字符模型:
class Character(models.Model):
name = models.CharField(max_length=60)
title = models.CharField(max_length=100)
game_origin = models.CharField(null=True, blank=True, max_length=100)
ref_id = models.CharField(null=True, max_length=20)
ref_link = models.CharField(null=True, max_length=100)
icon_link = models.CharField(null=True, max_length=100)
sprite= models.CharField(null=True, max_length=100)
portrait= models.CharField(null=True, max_length=100)
attack= models.CharField(null=True, max_length=100)
special= models.CharField(null=True, max_length=100)
damaged= models.CharField(null=True, max_length=100)
voice_1 = models.CharField(null=True, max_length=100)
voice_2 = models.CharField(null=True, max_length=100)
line_1 = models.TextField(null=True)
line_2 = models.TextField(null=True)
summary = models.TextField(null=True)
realm = models.CharField(max_length=60)
release_date = models.DateTimeField(auto_now=False)
index = models.IntegerField()
def __str__(self):
return self.name " " self.title
我按照此鏈接獲得了在過濾查詢集時將“__year”附加到 release_date 屬性的想法。但它沒有過濾資料庫,我仍然看到所有物件。我哪里錯了?如果我什至無法過濾年份,我就無法按月過濾,所以我首先關注年份。先感謝您。
uj5u.com熱心網友回復:
向視圖添加過濾器的典型方法是接受 URL 中的查詢引數,例如http://localhost:8000/character/?year=1990.
要在您的視圖中實作這一點,您可以從以下位置獲取引數request.GET:
@api_view(['GET'])
def characters(request):
queryset = Character.objects.filter(release_date__year=request.GET['year'])
serializer = CharacterSerializer(queryset, many=True)
return Response(serializer.data)
隨著您添加更多欄位進行過濾,其復雜性會迅速增加。該django-filter庫提供了一個很棒的 AP??I,用于在所有模型上配置過濾器,因此您不必自己撰寫所有這些。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432463.html
