1

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);
             });

さらに情報が必要ですか?

4

1 に答える 1

0

モデルに DateTimeField 以外のフィールドはありますか? PUT コマンドを使用すると、データが完全に変更されるため、完全なエントリが必要です。フィールドを部分的に更新したい場合は、PATCH コマンド http://django-tastypie.readthedocs.org/en/latest/interacting.html#partially-updating-an-existing-resource-patchを試してください

于 2012-08-21T21:40:20.463 に答える