如何解决如何避免Django Ajax表单中的“ AttributeError:'ModelFormOptions'对象没有属性'concrete_model'”
我一直试图使用Ajax在Django应用程序中发布相关模型中的记录。为了更新一对父/子模型,我使用以下视图,并且记录已保存在各个模型中。 但是,我不断收到以下错误消息:
AttributeError:'ModelFormOptions'对象没有属性 'concrete_model'“
以下是设置:
views.py
class MatListCreateView(LoginrequiredMixin,CreateView):
template_name = "..."
model = MatHdrList
form_class = CreateMatHdrListForm
def get(self,request,*args,**kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
mat_bom_list = CreateBomMatListFormset
return self.render_to_response(
self.get_context_data(form=form,mat_bom_list=mat_bom_list)
)
def post(self,**kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
mat_bom_list = CreateBomMatListFormset(self.request.POST)
if self.request.is_ajax and self.request.method == "POST":
if form.is_valid() and mat_bom_list.is_valid():
form.instance.created_by = self.request.user
self.object = form.save()
mat_bom_list.instance = self.object
mat_bom_list.save()
ser_instance = serializers.serialize('json',[ form,mat_bom_list,])
return JsonResponse({"instance": ser_instance},status=200)
else:
return JsonResponse({"error": form.errors},status=400)
return JsonResponse({"error": "Whoops"},status=400)
模板(jQuery ajax部分)
$('#materialListForm').submit(function(e) {
e.preventDefault();
var serializedData = $(this).serialize();
console.log(serializedData);
// var url1 = "{% url 'matl_list' %}";
$.ajax({
url: "{% url 'material_list_create' %}",type: 'POST',data: serializedData,success: function() {
console.log('Data Saved');
// window.location = url1;
},error: function (response,status,error) {
console.log('Problem encountered');
alert(response.responseText);
}
});
});
在发布(提交表单)时,将显示AttributeError: 'ModelFormOptions' object has no attribute 'concrete_model'
效果的警报。退出警报不会退出页面(即使在ajax调用中使用window.location
也是如此)。回到调用页面(即对象 listview ),可以看到记录已添加到父模型和子模型中。
解决方法
如果您的班级中没有属性,则会发生属性错误。
考虑我有一个这样的课程,
Class SuperHero(Models.Model):
real_name = models.CharField(max_length=50)
character_name = models.CharField(max_length=50)
我还创建了一个实例
batman = SuperHero(real_name='BruceWayne'. character_name='BatMan')
现在,实名和字符名是此SuperHero
对象的属性。
如果您访问诸如batman.real_name
之类的内容,它将为您提供BruceWayne
的值。
但是如果您还需要batman.super_powers
之类的其他东西,它将通过AttributeError:'SuperHero'对象没有属性'super_power'。
检查您的ModelFormOptions
模型,希望concrete_model
不存在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。