我一直在努力开发可在Django和Flash应用程序中使用的RESTful服务。
开发服务接口非常简单,但是我遇到了序列化具有外键和多对多关系的对象的问题。
我有一个像这样的模型:
class Artifact( models.Model ):
name = models.CharField( max_length = 255 )
year_of_origin = models.IntegerField( max_length = 4, blank = True, null = True )
object_type = models.ForeignKey( ObjectType, blank = True, null = True )
individual = models.ForeignKey( Individual, blank = True, null = True )
notes = models.TextField( blank = True, null = True )
然后,我将使用对此模型进行查询select_related()
,以确保遵循外键关系:
artifact = Artifact.objects.select_related().get(pk=pk)
获得对象后,我将其序列化,并将其传递回我的视图:
serializers.serialize( "json", [ artifact ] )
这就是我得到的,请注意,外键(object_type和个人)只是其相关对象的ID。
[
{
pk: 1
model: "artifacts.artifact"
fields: {
year_of_origin: 2010
name: "Dummy Title"
notes: ""
object_type: 1
individual: 1
}
}
]
很好,但是我希望使用的select_related()
是它会自动用相关对象而不只是对象的ID填充外键字段。
我最近转换为Django,但投入了大量时间使用CakePHP开发。
我对Cake ORM的真正满意之处在于,它将默认遵循关系并创建嵌套对象,并且能够在调用查询时解除关系的绑定。
这样就很容易以一种无需个案干预的方式来抽象服务。
我看到Django默认不执行此操作,但是有没有一种方法可以自动序列化一个对象及其所有相关对象?任何提示或阅读将不胜感激。
蟒蛇 的Django Django的ORM
我有类似的要求,尽管不是出于RESTful的目的。在我的情况下,我可以通过使用“完整”序列化模块来实现所需的功能Django Full Serializers
。这是wadofstuff的一部分,并根据新的BSD许可证分发。
Wadofstuff使此操作非常容易。例如,在你的情况下,你需要执行以下操作:
首先,安装wadofstuff。
其次,将以下设置添加到settings.py
文件中:
SERIALIZATION_MODULES = {
'json': 'wadofstuff.django.serializers.json'
}
第三,对用于序列化的代码稍作更改:
artifact = Artifact.objects.select_related().get(pk=pk)
serializers.serialize( "json", [ artifact ], indent = 4,
relations = ('object_type', 'individual',))
关键的更改是relations关键字参数。唯一(次要)陷阱是使用形成关系的字段名称,而不是相关模型的名称。
问题内容: 我正在使用django rest框架来创建API。我有以下型号: 为类别创建序列化器: …这将为我提供: 我将如何从Item序列化程序获得相反的结果,即: 我已经阅读了有关其余框架的反向关系的文档,但这似乎与非反向字段的结果相同。我是否缺少明显的东西? 问题答案: 只需使用相关字段而不进行设置。 请注意,这也是因为你想要将输出命名为,而实际字段是,因此需要source在序列化程序字段上
我正在尝试让一个客户与电子邮件和电话有一对多的关系。 这是我的连载器 我无法指出为什么这篇文章不会继续,因为它一直说客户是必需的。 虽然我通过添加read_only=True使其工作,但即使我在ClientSerializer中定义了一个def create(self,validated_数据),我也无法在json数据中获得电子邮件和电话数组。 这就是我在views.py中调用序列化程序的方式 这
我正在使用django rest框架创建一个API。我有以下几种型号: 要为类别ID创建序列化程序,请执行以下操作:
问题内容: 我有一堂课 并希望将其序列化为 如何实现此目标(以及如何反序列化为对象? 我正在尝试使用 但显然最终会引号过多。 也不起作用,因为它不能创建足够的报价。 问题答案: 我发现了一种使用JsonSerializer的方法: 本类需要了解这一点: 反序列化非常相似: 这也需要在Foo类上进行注释:
我有以下用于序列化查询集的代码: 下面是我的 我需要将其序列化。但它说无法序列化
以下代码导致此异常: 所以问题是:如何在GSON序列化和反序列化的泛型HashMap中获得正确的实例?