python – Tastypie – 更新嵌套资源而不是在POST上创建
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Tastypie – 更新嵌套资源而不是在POST上创建,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1869字,纯文字阅读大概需要3分钟。
内容图文
![python – Tastypie – 更新嵌套资源而不是在POST上创建](/upload/InfoBanner/zyjiaocheng/803/e7f9be08d92349cb96e75eb88a2aaa15.jpg)
我正在尝试POST一个基本上由子资源列表组成的资源.这是我的资源:
class MovementResource(ModelResource):
transactions = fields.ToManyField('stock.api.TransactionResource',
'transaction_set', related_name='movement', full=True)
class Meta:
queryset = Movement.objects.all()
resource_name = 'movement'
always_return_data = True
authorization = Authorization()
class TransactionResource(ModelResource):
movement = fields.ToOneField(MovementResource, 'movement')
product = fields.ToOneField(ProductResource, 'product', full=True)
class Meta:
queryset = Transaction.objects.all()
resource_name = 'transaction'
authorization = Authorization()
这代表了库存中各种产品的移动.移动表单只是一个内联列表,每个事务一个.它根本不使用django表格.
我的问题是,当尝试POST一个指定要创建的事务列表的移动时,我发现Tastypie正在更新现有事务而不是插入新事务.这是POST请求的JSON,表示只有一个事务的移动:
{
'transactions': [
{
'product': '/api/v1/product/3/',
'quantity': '1'
}
]
}
响应JSON显示已创建运动,但事务具有以前存在的ID,并且具有相同的产品和数量.此事务对象中的移动FK已更新为指向新创建的移动.回复数据:
{
'date': '2013-02-07 ···',
'id': '66',
'resource_uri': '/api/v1/movement/66/',
'transactions': [
{
'date': '2013-01-30 ···', # Should be the same as parent movement's date
'id': '30',
'movement': '/api/v1/movement/66/',
'product': { ··· product resource data ··· },
'quantity': '1',
'resource_uri': '/api/v1/transaction/30/',
}
]
}
我错过了什么吗? Tastypie不应该创建嵌套资源,这是对列表端点的POST吗?我已经尝试将ForeignKey和ToOneField用于MovementResource,看看它是否会有所作为,但没有成功. (我实际上找不到两者之间的区别.)
谢谢!
解决方法:
我遇到了同样的问题.
经过几个小时的努力,我找到了一个强制在相关资源上执行POST的解决方法:如果为嵌套资源的主键传递空值,则tastypie POST一个新的,而不是更新现有的.
如果你发布以下内容,你应该得到你正在寻找的行为:
{
'transactions': [
{
'product': '/api/v1/product/3/',
'quantity': '1',
'id': null
}
]
}
内容总结
以上是互联网集市为您收集整理的python – Tastypie – 更新嵌套资源而不是在POST上创建全部内容,希望文章能够帮你解决python – Tastypie – 更新嵌套资源而不是在POST上创建所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。