首页 > 解决方案 > 从派生(抽象)模型中序列化模型

问题描述

我有以下型号:

class Address(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    ....
    class Meta:
        abstract = True

class BillingAddress(Address):
    is_default = models.BooleanField()
    ...
    class Meta:
        db_table = 'billing_address'

我正在尝试为 BillingAddress 构建一个序列化程序:

class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        abstract = True
        model = AddressModel

class BillingAddressSerializer(AddressSerializer):
    def to_representation(self, obj):
        return AddressSerializer(obj, context=self.context).to_representation(obj)

    class Meta(AddressSerializer.Meta):
        model = UserBillingAddress
        fields = (
            'id',
            'is_default',
        )

我不断得到:

 ValueError: Cannot use ModelSerializer with Abstract Models.

如何构建我的 BillingAddressSerializer 以反映这两个类?

标签: djangodjango-rest-frameworkdjango-serializer

解决方案


抽象模型是一个基类,您可以在其中定义要包含在所有子模型中的字段。Django 不会为抽象模型创建任何数据库表。为每个子模型创建一个数据库表,包括从抽象类继承的字段和在子模型中定义的字段。

由于没有“Address”表,所以“AddressSerializer”是无效的。


推荐阅读