问题
I have been trying to post data in my Django application using ajax post. The data is getting saved but in the terminal I am coming up against the following error:
AttributeError: 'ModelFormOptions' object has no attribute 'concrete_model'
Here are the relevant codes intended to achieve my goal:
Views.py:
def saveMaterial(request):
if request.is_ajax and request.method == "POST":
form = CreateMaterialForm(request.POST) # It's a ModelForm
mat_bom_list = CreateBomMatListFormset(request.POST, request.FILES) # Using Inline formset factory
if form.is_valid():
form = form.save(commit=False)
mat_bom_list = CreateBomMatListFormset(request.POST, request.FILES)
if mat_bom_list.is_valid():
form.save()
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": "Error"}, status=400)
else:
form = CreateMaterialForm()
mat_bom_list = CreateBomMatListFormset()
return render(request, "material_create.html", {"form": form, "mat_bom_list": mat_bom_list})
Ajax script:
$('#materialListForm').submit(function(e) {
e.preventDefault();
var serializedData = $(this).serialize();
console.log(serializedData);
$.ajax({
url: "{% url 'material_create' %}",
type: 'POST',
data: serializedData,
success: function() {
console.log('Data Saved');
},
error: function (response, status, error) {
alert(response.responseText);
}
});
});
The traceback:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/views/generic/base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/auth/mixins.py", line 52, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/auth/mixins.py", line 85, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/views/generic/base.py", line 89, in dispatch
return handler(request, *args, **kwargs)
File "/Users/discrete/Desktop/proj/lead/views.py", line 1687, in post
ser_instance = serializers.serialize('json', [ form, mat_bom_list, ])
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/serializers/__init__.py", line 128, in serialize
s.serialize(queryset, **options)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/serializers/base.py", line 84, in serialize
concrete_model = obj._meta.concrete_model
AttributeError: 'ModelFormOptions' object has no attribute 'concrete_model'
I find that there is not much information available on the web specifically for this error. Is it possible for somebody out there to please help solve this riddle?
来源:https://stackoverflow.com/questions/64708484/how-to-resolve-attributeerror-modelformoptions-object-has-no-attribute-concr