djs*_*ith 6 python django rest tastypie
是否可以使用TastyPie将ForeignKey字段更新为None?
相关问题:在PUT期间,tastypie不会删除foreignkey引用
是)我有的:
class SomeObject(models.Model):
some_field = models.ForeignKey(SomeOtherObject, null=True)
Run Code Online (Sandbox Code Playgroud)
(当然还有相应的TastyPie资源类可以更新其他字段)
我想要的是:
要更新some_field为None使用TastyPie.
我尝试过(在JavaScript中):
$.put('/my/api/model/someobject/42/', { some_field: null });
$.put('/my/api/model/someobject/42/', { some_field: '/my/api/model/someotherobject/null/' });
$.put('/my/api/model/someobject/42/', { some_field: '' });
$.put('/my/api/model/someobject/42/', { some_field: 0 });
$.put('/my/api/model/someobject/42/', { some_field: false });
Run Code Online (Sandbox Code Playgroud)
等等.这些都导致404或400.一些导致204,但数据库未更新.
通过阅读代码full_dehydrate(),目前似乎不可能这样做.
我查看了github上最近的代码,我不相信这是可能的.
这是一个通用的解决方案.创建基础资源并从此扩展所有其他资源.这是一个黑客,但它的工作原理.
class MyResource(ModelResource):
def obj_update(self, bundle, request=None, **kwargs):
for field_name in self.fields:
field = self.fields[field_name]
if type(field) is ToOneField and field.null and bundle.data[field_name] is None:
setattr(bundle.obj, field_name, None)
return super(MyResource, self).obj_update(bundle, **kwargs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2993 次 |
| 最近记录: |