django rest framework - 全局默认模型序列化器

时间:2018-04-12 13:32:26

标签: python django django-rest-framework serializer

简而言之,我希望每个模型都有一个全局默认的序列化程序。我的用例是创建动态序列化器 - 即动态创建ModelSerializer类。

class Customer(models.Model):
   name = models.CharField(max_length=200)
   code = models.CharField(max_length=200)
   # many more fields..

class CustomerTicket(models.Model):
   customer = models.ForeignKey(Customer)
   date = models.DateTimeField(auto_now_add=True)
   # more fields..

客户将被许多其他模型引用,因此它将被序列化为嵌套对象。我不想要'代码'字段出现在输出中 - 无论它应该总是被排除在外。

现在我想创建一个功能:

def serialize_default(model, fields, queryset):
    class S(serializers.ModelSerializer):
        class Meta:
            model = model 
            fields = fields
            depth = 1
    return S(queryset, many=True)

如果我使用此函数序列化CustomerTicket queryset,我将把所有客户字段作为嵌套对象。我知道我可以在本地覆盖它,但我想定义一个默认使用的CustomerSerializer(对于嵌套的Customer),除非将其他序列化器指定为字段。怎么做到这一点?

1 个答案:

答案 0 :(得分:2)

这样的事情对你有用吗?

class DefaultCustomerSerializer(serializers.ModelSerializer):

    # whatever fields you want


class DefaultCustomerSerializerModel(serializers.ModelSerializer):

    customer = DefaultCustomerSerializer()


# You can inherit from this to have default customer serializer 
# on serializers you want.

class CustomerTicketSerializer(DefaultCustomerSerializerModel): 

    # Other fields