サーバー側でバックボーンと django を使用してシングルページ アプリケーションを作成しようとしています。
Django の ModelForm を使用した検証は、ネストされたモデルと適切な場所でユーザーにエラー メッセージを表示することが難しいため、その目的には適していません。
Django でモデルのプロパティを検証し、単一ページ アプリケーションのページに表示するための良い方法はありますか?
サーバー側でバックボーンと django を使用してシングルページ アプリケーションを作成しようとしています。
Django の ModelForm を使用した検証は、ネストされたモデルと適切な場所でユーザーにエラー メッセージを表示することが難しいため、その目的には適していません。
Django でモデルのプロパティを検証し、単一ページ アプリケーションのページに表示するための良い方法はありますか?
変更された backbone.js と django-rest-framework を使用して、この正確な設定で単一ページ アプリを運用しています。
DRF リソースを介して ModelForm 検証を使用します (単一ページ アプリ用の API をセットアップする場合は、DRF を確認してください。非常に簡単でカスタマイズ可能です) 。ネストされたモデルを使用する場合、ビューごとに 1 つのモデルをバインドし、保存を個別に処理します。最初にメイン モデルを保存し、その保存が成功したら、ネストされたモデルをそれぞれ個別のエラー処理で保存します。
バックボーン側には、フォームのレンダリング、エラー処理などを処理する特別な FormView があります。これには、フォームをシリアル化し、データをモデルに保存する「送信」メソッドがあります。私が取り除いたもう少し健全性チェックロジックがあります。これは私たちの正確なコードではなく、実行される可能性のあるより非常にjavascriptのような疑似コードです:))
FormView = Backbone.View.extend({
// ... left out functionality for rendering, serializing, etc
submit: function(){
var data = form.serialize();
var self = this;
self.clearErrors();
self.model.save(data,{
success: function(model, response){
self.showSuccess(response) // displays a save-success message
},
error: function(model, response){
self.showError($.parseJSON(response.responseText)) //displays errors
}
})
},
clearErrors: function(){
var self = this;
self.$("ul.non-field-errors").empty() // Clear the main form error list
_.each(self.fields, function(field){
self.$("ul.field-errors#field-" + field.name + "]").empty();
});
},
showErrors: function(errors){
/*
Errors are given by DRF as a dict:
{
errors: [error1, error2, ...], // form level errors
field-errors: { // field level errors
field_name1 : [error1, error2, ...],
field_name2 : [error1, error2, ...],
}
}
*/
var self = this;
self.$("ul.form-errors").empty() // Clear the main form error list
_.each(errors.non-field-errors, function(error){
self.$("ul.errors").append("<li>"+error+"</li>");
});
_.each(errors.field-errors, function(error, field_name){
_.each(error, function(err){
self.$("ul.field-errors#field-" + field_name + "]").append("<li>"+error+"</li>");
});
});
}
});
django 側では、ModelResource と ModelForm の検証を使用すると、DRF で適切に処理できます。