猿问

Django 字段序列化器

我有一个带有一些自定义字段的序列化器,这些字段取决于特定的查询。问题是,每次序列化程序尝试获取该字段的值时,它都必须对数据库执行查询。如果序列化器是一个 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

有没有办法将该结果存储在序列化器的属性中?另外,如果我在序列化器字段之一中设置一个值,如何检索同一序列化器中的另一个字段并进行一些数学运算?


慕的地10843
浏览 68回答 1
1回答

偶然的你

如果我有选择,我会在一个方法中完成所有这些计算逻辑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        }
随时随地看视频慕课网APP

相关分类

Python
我要回答