字段序列化程序Django



我有一个带有一些自定义字段的序列化程序,这些字段取决于特定的查询。问题是,每次序列化程序尝试获取该字段的值时,它都必须对DB执行查询。如果序列化程序是many=True序列化程序,该怎么办?。

class ExampleSerializer(serializers.ModelSerializer):
field_one = serializers.SerializerMethodField()
field_two = serializers.SerializerMethodField()
field_three = serializers.SerializerMethodField()
.
.
.
def get_field_one(self, obj):
try:
# This is where i do the query
query_result = obj.objects.filter(filter=self.context.get("filter").first()
if query_result:
# Do field one stuff
except Exception:
# Do exception stuff
def get_field_two(self, obj):
try:
# This is where i do the query
query_result = obj.objects.filter(filter=self.context.get("filter").first()
if query_result:
# Do field two stuff
except Exception:
# Do exception stuff
def get_field_three(self, obj):
try:
# This is where i do the query
query_result = obj.objects.filter(filter=self.context.get("filter").first()
if query_result:
# Do field three stuff
except Exception:
# Do exception stuff

有没有办法将结果存储在序列化程序的属性中?此外,如果我在其中一个序列化程序字段中设置了一个值,我如何检索并对同一序列化程序中的另一个字段进行计算?

如果我有选择,我会在单个方法中执行所有这些计算逻辑

class ExampleSerializer(serializers.ModelSerializer):
generic_field = serializers.SerializerMethodField()
def get_generic_field(self, obj):
# first query
first_result = FirstModel.objects.filter(
filter=self.context.get("filter")
).aggrgate(sum=Sum('any_field'))['sum']
# second query
second_model_instance = SecondModel.objects.filter(
some_value__gte=first_result).first()
second_result = second_model_instance.some_field_name
# and so on
# at last, return these results as
return {
"first_result": first_result,
"second_result": second_result,
# and so on
}

最新更新