为了账号安全,请及时绑定邮箱和手机立即绑定

Django 字段序列化器

Django 字段序列化器

慕的地10843 2023-10-06 19:38:15
我有一个带有一些自定义字段的序列化器,这些字段取决于特定的查询。问题是,每次序列化程序尝试获取该字段的值时,它都必须对数据库执行查询。如果序列化器是一个 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有没有办法将该结果存储在序列化器的属性中?另外,如果我在序列化器字段之一中设置一个值,如何检索同一序列化器中的另一个字段并进行一些数学运算?
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

如果我有选择,我会在一个方法中完成所有这些计算逻辑


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

        }


查看完整回答
反对 回复 2023-10-06
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信