在 drf3 中,您现在可以通过重写 create() 方法并自行处理 valid_data 来实现可写嵌套序列化器。但是,如果模型中有多层嵌套关系,如下所示:
class Order(models.Model):
"""
Order model to aggregate all the shipments created by a user at a particular time.
"""
created_at = models.DateTimeField(
verbose_name='created at',
auto_now_add=True
)
updated_at = models.DateTimeField(
verbose_name='updated at',
auto_now=True
)
class Shipment(models.Model):
"""
Many to One Relationship with the Orders Model. Aggregates all the details of a shipment being sent.
"""
created_at = models.DateTimeField(
verbose_name='created at',
auto_now_add=True
)
updated_at = models.DateTimeField(
verbose_name='updated at',
auto_now=True
)
order = models.ForeignKey(
to=Order
)
class ItemDetail(models.Model):
"""
Specifies details of the shipment contents. One to One relationship with the Shipment Model.
"""
shipment = models.OneToOneField(
to=Shipment,
primary_key=True
)
CONTENT_TYPES = (
('D', 'Documents'),
('P', 'Products')
)
content = models.CharField(
verbose_name='package contents',
max_length=1,
choices=CONTENT_TYPES,
default='P'
)
我将如何使用自定义创建方法编写订单序列化程序来处理这种情况?我见过的所有示例(包括官方页面上的示例)都只有一层嵌套关系。
Read 在深度论证方面工作得很好。不过,我真的愿意
感谢您对编写创建/更新方法的任何帮助。
The 文档中解释了可写嵌套序列化器 http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers.
请不要在创建/更新中重新创建新的序列化器。
一旦您点击最顶层的序列化程序创建/更新,您的所有数据都会得到验证,包括嵌套的数据。
此时,您必须自己编写从 valid_data 到各种对象的映射。
我尝试使其在 DRF 2.x 中自动化,但事实证明有太多用例,其中一些是专有的。因此,DRF 将这项工作留给了开发人员(即您)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)