0

データを送信すると、内部サーバーエラーがスローされるフォームがあります

整合性エラーが原因であると表示されます。

IntegrityError at /cookbook/createrecipe/

(1048, "Column 'original_cookbook_id' cannot be null")

奇妙なのは、original_cookbook_idという列がないことです。私が持っているのは、クックブックモデルの外部キーであるoriginal_cookbookです。

エラーが発生しているビューは次のとおりです。

def createrecipe(request):
        print "entering createrecipeview"
        if request.method == 'POST':
            print "form is a post"
            form = RecipeForm(request.POST)
            print form.errors
            if form.is_valid():
                print "form is valid"
                form = RecipeForm(initial = {'original_cookbook' : request.user.cookbooks.all()[0]})// this is where the error is being thrown
                form.save()

                t = loader.get_template('cookbook/create_form.html')
                c = RequestContext(request, {
                'form': form,
                })

                data = {
                'replace': True,
                'form': t.render(c),
                'success': True,
                }

                json = simplejson.dumps(data)
                return HttpResponse(json, mimetype='text/plain')
            else:
                print "form is invalid"
                form = RecipeForm(request.POST)
                t = loader.get_template('cookbook/create_form.html')
                c = RequestContext(request, {
                    'form':form,
                })

                data ={
                    'form': t.render(c),
                    'success': False,
                }

                json = simplejson.dumps(data)
                return HttpResponse(json, mimetype='text/plain')

original_cookbookを間違った方法で宣言している可能性があると思います

他の誰かが_idが外部キーに追加された経験がある/この問題をどのように解決できるか考えている

どうもありがとう

ケイティ

アップデート

これが私のjavascript関数です

<script type="text/javascript"> 

$(document).ready(function(){

    function hijack() {
        var form = $('form#createrecipeform');
        form.each (function(){
            this.reset();
            });
        form.submit(function(e) {
            e.preventDefault();
            console.log('ajax form submission function called successfully.');
            //form = $(this);
            console.log(form)
            var serialized_form = form.serialize();
            $.ajax({ type: "POST", 
                url: $(this).attr('action'),
                data: serialized_form, 
                success: (function(data) { 
                    console.log('ajax success function called successfully.');
                    data = $.parseJSON(data);
                    if (data.success) {
                        console.log('success');
                        //right now it is logging success to 
                        //console but nothing else is happening
                        //what else should happen on data success?
                    } else {        
                        console.log('failure');
                        var newForm = data.form;
                        form.replaceWith(newForm);
                        hijack();
                    }
                })
            });
            return false;
        });
    };

    hijack();

});
</script> 
4

1 に答える 1

1

あなたにはoriginal_cookbook_idフィールドがあります。ここに、外部キーのpkがテーブルに格納されます。Djangoは自動的に_idビットを追加します。すべてのエラーは、そのフィールドがNOT NULLに設定されており、入力する値を指定しなかったことを意味しますoriginal_cookbook

アップデート

それ自体は「間違った」ものではありませんが、注意すべき点がいくつかあります。まず、initialは、フォームに表示される初期値のみを設定します(明らかに十分です)。ただし、後でユーザーまたはその他のアクションによって空に戻された場合でも、空のままです。つまりinitial、最終的に投稿されるデータに実際の影響はありません。

あなたはJavaScriptを投稿しなかったので、フォームの送信方法について話すことはできませんが、それも問題になる可能性があります。何らかの理由でAJAX投稿の残りの部分と一緒にフィールドを送信しない場合は、実際のフィールドが何に設定されているかどうかは関係ありません。

于 2012-05-10T16:28:46.993 に答える