在 Django 中序列化时丢失子类字段?
losing subclass fields when serializing in django?
在序列化 Django 对象时,我看到了令人费解的错误行为。例如,我有模型:
class MyTag(TagBase):
user = models.ForeignKey(User)
class MyMpttTag(MPTTModel, MyTag):
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
class MPTTMeta:
parent_attr = 'parent'
这意味着 MyMpptTag 具有 name, slug, user, parent
的字段。但是当我做 serializers.serialize('json', MyMpptTag.object.all())
时,我得到:
[{"fields": {"lft": 1, "level": 0, "tree_id": 29, "parent": 空, "rght": 2}, "model": "index.mymptttag", "pk": 45}...]
为什么我会丢失 name, slug, and user
,我该如何取回它们?谢谢
在该模型设计中,数据库中将有 2 个表:
yourapp_mytag
将具有主键列(普通自增列),从 TagBase
继承的所有列(只要 TagBase
是抽象的)和列 user - foreign用户模型的关键
yourapp_mymptttag
tht 将具有主键列,该列也是 MyTag
模型的外键和 mptt 的列。不会有任何从 MyTag
. 继承的列
这意味着:模型 MyMpttTag
中没有从 MyTag
继承的列,只有对 MyTag
中实际列的引用。
在序列化中将有 2 种类型的对象:MyMpttTag
和 MyTag
。
在序列化 Django 对象时,我看到了令人费解的错误行为。例如,我有模型:
class MyTag(TagBase):
user = models.ForeignKey(User)
class MyMpttTag(MPTTModel, MyTag):
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
class MPTTMeta:
parent_attr = 'parent'
这意味着 MyMpptTag 具有 name, slug, user, parent
的字段。但是当我做 serializers.serialize('json', MyMpptTag.object.all())
时,我得到:
[{"fields": {"lft": 1, "level": 0, "tree_id": 29, "parent": 空, "rght": 2}, "model": "index.mymptttag", "pk": 45}...]
为什么我会丢失 name, slug, and user
,我该如何取回它们?谢谢
在该模型设计中,数据库中将有 2 个表:
yourapp_mytag
将具有主键列(普通自增列),从TagBase
继承的所有列(只要TagBase
是抽象的)和列 user - foreign用户模型的关键yourapp_mymptttag
tht 将具有主键列,该列也是MyTag
模型的外键和 mptt 的列。不会有任何从MyTag
. 继承的列
这意味着:模型 MyMpttTag
中没有从 MyTag
继承的列,只有对 MyTag
中实际列的引用。
在序列化中将有 2 种类型的对象:MyMpttTag
和 MyTag
。