同じ親の基底クラスを持つ2つの異なるモデルが与えられています。両方の子モデルのインスタンスを含む連鎖リストを直列化するには、Django Rest Frameworkシリアライザまたはserpyを使用する方法はありますか?Django:連鎖した複数のモデルのリストをシリアライズ
考えると、いくつかの例モデル:
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'シリアライザから例外が発生しました –
ああ、私がテストしたシリアライザにいくつかの例を追加します:) –
あなたはこのエラーを引き起こす行に関するスタックトレースの情報 –