序列化类Django

时间:2013-12-05 14:10:09

标签: python django

我正在尝试在Django中序列化一个类,以便我可以获取json文件中的所有可用字段,我需要类似

的内容
{"tablename": ["Verbose Name", "ModelType", "RelatedClass", "relatefield"]}

这个想法是大多数对象只有详细的名称和模型类型,但是对于相关的字段,它也会有关系引用的类的名称,以及我可以手动添加的字段将helptext作为默认值,或者我可以将其留下,并以不同的方式处理它。

我需要在课堂上这样做而不是我用pickle和jsonpickle试过的对象,但它们似乎没有像我期望的那样工作,我没有想法,任何输入都会非常感激。

感谢。

编辑:需要澄清更好

class Test(models.Model):
    name = models.CharField(verbose_name="Name")
    email = models.CharField()
    books = models.ForeignKey(Book, verbose_name="Books")

class Book(models.Model):
    name = models.CharField()

现在我只想序列化Test,根本就没有值,只有类本身,所以你有。

"name": {"verbose_name": "Name", "type": "CharField"}
"books": {"verbose_name": "Books", "type": "ForeignKey", "related_class": "Book", "related_class": "Country", "related_field": "name"}

我需要一个围绕它们的json线出来,但我不必对它们中的数据运行任何查询只是模型信息。

2 个答案:

答案 0 :(得分:1)

Django的序列化框架提供了一种将Django模型“转换”为其他格式的机制。通常这些其他格式将基于文本并用于通过线路发送Django数据,但序列化程序可以处理任何格式(基于文本或不基于文本)。

from django.core import serializers
data = serializers.serialize("xml", SomeModel.objects.all())

xml示例:

<?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
    <object pk="123" model="sessions.session">
        <field type="DateTimeField" name="expire_date">2013-01-16T08:16:59.844560+00:00</field>
        <!-- ... -->
    </object>
</django-objects>

JSON:

[
    {
        "pk": "4b678b301dfd8a4e0dad910de3ae245b",
        "model": "sessions.session",
        "fields": {
            "expire_date": "2013-01-16T08:16:59.844Z",
            ...
        }
    }
]

反序列化数据也是一个相当简单的操作:

for obj in serializers.deserialize("xml", data):
    do_something_with(obj)

https://docs.djangoproject.com/en/dev/topics/serialization/

答案 1 :(得分:1)

类也是对象,模型字段,因此您可以轻松地检查它们。一种解决方案是为模型类(非实例)编写your custom json encoder。有关模型字段,详细名称等的所有信息都存储在YourModelClass.__meta