Как фильтровать django queryset на основе значения поля serializer?
serializer
class MyModelSerializer(serailizers.ModelSerializer):
hrs = serializers.SerializerMethodField()
get_hrs(self, obj):
datetime = SomeModel.objects.filter(id=obj.id).last().datetime
now = datetime.now()
return (now - datetime).total_seconds() // 3600
class Meta:
model = MyModel
fields = "__all__"
Теперь в api будет параметр фильтра hr
что ему нужно сделать, это отфильтровать набор запросов, соответствующий этому вышеуказанному вычисленному hr.
Например:
@api_view(["GET"])
def get_list(request):
qs = MyModel.objects.all()
hr = request.GET.get("hr")
if hr:
qs = qs.filter(hrs=hr) # hrs is not inside model
return MyModelSerializer(qs, many=True).data
Здесь hrs
нет внутри модели, это поле сериализатора над вычисляемым.
Как я могу отфильтровать подобным образом поля serialzier? Любая помощь будет очень полезна.
у вас неправильное размещение:
class MyModelSerializer(serailizers.ModelSerializer):
class Meta:
model = MyModel
fields = "__all__"
hrs = serializers.SerializerMethodField()
def get_hrs(self, obj):
datetime = SomeModel.objects.filter(id=obj.id).last().datetime
now = datetime.now()
return (now - datetime).total_seconds() // 3600