简而言之,我希望每个模型都有一个全局默认的序列化程序。我的用例是创建动态序列化器 - 即动态创建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),除非将其他序列化器指定为字段。怎么做到这一点?
答案 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