django - 从派生(抽象)模型中序列化模型
问题描述
我有以下型号:
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 以反映这两个类?
解决方案
抽象模型是一个基类,您可以在其中定义要包含在所有子模型中的字段。Django 不会为抽象模型创建任何数据库表。为每个子模型创建一个数据库表,包括从抽象类继承的字段和在子模型中定义的字段。
由于没有“Address”表,所以“AddressSerializer”是无效的。