Django TastyPie资源更新错误

时间:2012-08-21 15:48:03

标签: django tastypie

我正在使用JQuery从移动客户端使用tastypie API更新Django模型。 当我发送PUT请求时,我收到错误Column 'created' cannot be null

“已创建”列位于我的模型中,需要更新,类型为

models.DateTimeField(auto_now_add=True).

使用tastypie API进行更新时,更新会导致此列设置为null,从而引发错误。

可以直接使用django表单成功更新模型。该错误仅由API更新调用引起。不确定可能是什么问题。

我尝试将字段更改为(default=datetime.datetime.now, editable=False, blank=True) 代替auto_now_add,但它仍然给出了相同的错误。如果有人知道问题是什么,请告诉我。

以下是资源代码的一部分:

class AbcResource(ModelResource):

    def obj_update(self, bundle, request=None, **kwargs):
        logger.debug("Update called")
        res = super(AbcResource, self).obj_update(bundle, request)
        signals.abc_updated.send( sender=request, abc=res.obj, user=request.user )
        return res

以下是该模型的一部分:

class Abc( models.Model ):
    created = models.DateTimeField(_('created'), auto_now_add=True)

模型没有自定义保存方法。

Hers是发送PUT请求的代码:

var url = root + "/api/v1/abc/" + selected_abc + "/" + "?user_key=" + user_guid + "&user_name=" + username + "&format=json";
var abc_data = xmlRequest(url, false);
abc_data["field"] = field_value;
var request = $.ajax({
                     url: url,
                     type: 'PUT',
                     contentType: 'application/json',
                     data: JSON.stringify(abc_data),
                     dataType: "application/json",
                     processData: false
                     })
request.done(function(msg) {
             console.log("Status update pass : " + msg);
             });

request.fail(function(jqXHR, textStatus) {
             console.log("Status update fail : " + jqXHR.responseText);
             console.log(jqXHR);
             });

是否需要更多信息?

1 个答案:

答案 0 :(得分:0)

你的模型中是否有除DateTimeField之外的其他字段?使用PUT命令将完全改变您的数据,因此您需要一个完整的条目。 如果要部分更新字段,请尝试PATCH命令 http://django-tastypie.readthedocs.org/en/latest/interacting.html#partially-updating-an-existing-resource-patch