是否可以使用 TastyPie 将 ForeignKey
字段更新为 None
?
相关问题:tastypie won't remove foreignkey reference during PUT
我有什么:
class SomeObject(models.Model):
some_field = models.ForeignKey(SomeOtherObject, null=True)
(当然还有相应的 TastyPie 资源类,可以很好地更新其他字段)
我想要的:
使用 TastyPie 将 some_field
更新为 None
。
我尝试过的(在 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 });
等等。这些都是404或者400,有的是204,但是数据库没有更新。
通读了full_dehydrate()
中的代码,目前看来是不可能的。
我看过最近的代码on github ,我不相信这是可能的。
最佳答案
这是一个通用的解决方案。创建基础资源并从该资源扩展所有其他资源。这是一个 hack,但它有效。
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)
关于python - 使用 TastyPie 将 ForeignKey 字段更新为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9695798/