首页 文章

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

提问于
浏览
1

简而言之,我希望每个模型都有一个全局默认的序列化程序 . 我的用例是创建动态序列化器 - 即动态创建 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..

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

现在我想创建一个函数:

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 回答

  • 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
    

相关问题