python - 使用 TastyPie 将 ForeignKey 字段更新为 null

标签 python django rest tastypie

是否可以使用 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/

相关文章:

python - 没有名为 examples.tutorials.mnist 的模块

python - 使用信号量限制并发 AsyncIO 任务数量不起作用

python - pyodbc.OperationalError : ('HYT00' , u'[HYT00] [unixODBC][Microsoft][SQL Server 的 ODBC 驱动程序 13] 登录超时已过期 (0) (SQLDriverConnect)')

python - 原始查询必须包含主键错误,即使我正在执行 SELECT *

django:在包含的模板中使用 block

Java - 如何进行 JSON 日期验证?

rest - 运行时tomcat启动时带有HOT部署: Groovy script does not load dynamically from applicationContext. xml的Spring/REST应用程序

python - django rest framework 没有身份验证没有权限

python - 希望使用 Django ORM 行的每个值与标准值有所不同

django - Elasticsearch过滤器(数字字段)不返回任何内容