Я делаю Custom Filter
.
Он должен проверять каждое поле JSONField модели и подбирать строки в зависимости от условий.
Это код, который я хочу.
Как я могу решить это ??
class MyText(models.Model):
myJson = JSONField()
class MyTextFilter(filters.FilterSet):
post_date = filters.DateTimeFilter(method="post_date_filter")
def post_date_filter(self, queryset, name, value):
for mt in MyText:
jsonObj = json.loads(mt.myJson)
if jsonObj['postdate'] > value:
#do something here????
#return something here?????
class Meta:
model = MyText
Я пробовал эти два. благодаря @ Charnel
ls = MyText.objects.annotate(postdate=Cast(F('myJson__postdate'), DateField())).values_list('postdate', flat=True)
print(ls)
ls = MyText.objects.annotate(postdate=Cast(F('data__postdate'), DateField())).values_list('postdate', flat=True)
print(ls)
Бывший один показывает
<QuerySet [None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, '...(remaining elements truncated)...']>
позже один показывает
Cannot resolve keyword 'data' into field. Choices are: id,myJson
Я проверял мой Json, одна запись похожа на эту
{"postdate": "Wed Mar 18 16:44:34 +0000 2020", "id": 1240318188610437122}
Я попробовал несколько тестов ниже, они правильно показывают json, поэтому мне нужен способ забрать предмет из json ....
ls = Mytext.objects.annotate(postdate=Cast('myJson', JSONField())).values_list('postdate', flat=True)
print(ls)