【发布时间】:2017-01-19 14:31:21
【问题描述】:
给定两个不同的模型,具有相同的父基类。有什么方法可以使用 Django Rest Framework Serializers 或 serpy 来序列化包含两个子模型实例的链表?
给出一些示例模型:
class BaseModel(models.Model):
created_at = models.DateField()
class Meta:
abstract = True
class ChildModel1(BaseModel):
field_one = models.TextField()
class ChildModel2(BaseModel):
field_two = models.TextField()
还有一个示例视图:
def get(self, request):
q1 = ChildModel1.objects.all()
q2 = ChildModel2.objects.all()
chained_list = sorted(
chain(q1, q2),
key=attrgetter('created_at'))
serializer = BaseModelSerializer(chained_list, many=True)
链接模型的方法取自this问题的答案。
根据我目前的尝试,我得到一个非常明显的错误,比如:
AttributeError: 'ChildModel1' object has no attribute 'field_two'
我知道将两个模型与一些不同的领域混合并不是最佳做法,但就我而言,我认为这是必要的。
我测试过的一些序列化器示例:
第一个例子:
class BaseModelSerializer(serializers.ModelSerializer):
class Meta:
model = BaseModel
第二个例子:
class BaseModelSerializer(serpy.Serializer):
created_at = serpy.StrField()
field_one = serpy.StrField(required=False)
field_two = serpy.StrField(required=False)
【问题讨论】:
-
我最好的猜测是,您的案例中的异常是从您未在此处共享的
BaseModelSerializer序列化程序引发的 -
啊,我明白了,我会在我测试过的序列化器中添加一些示例:)
-
您将在堆栈跟踪中获得有关引发此错误的行的信息
标签: python django serialization django-rest-framework