データフォームに格納されたデータにアクセスする際に現在問題が発生しています。私はそれをAjaxに渡し、views.pyのputメソッドで受け取っています。問題は、私はrequest.POST ["item_name"]とファイルrequest.FILES ["photo"]でアクセスする方法しか知りません。しかし、明らかに、この要求はput要求では機能しません。誰でも助けてくれますか?djangoのクラスベースのビューのput要求でデータフォームにアクセスする方法
jQueryの
const form = new FormData();
const name = $('#edit-product-name-input-' + productID).val();
const quantity = $('#edit-product-quantity-input-' + productID).val();
const description = $('#edit-product-description-input-' + productID).val();
const price = $('#edit-product-price-input-' + productID).val();
const photo = $('#edit-product-photo-' + productID);
if (extractPhoto(photo)) {
form.append('photo', extractPhoto(photo));
}
form.append('name', name);
form.append('price', price);
form.append('description', description);
form.append('quantity', quantity);
form.append('product_id', productID);
attachCSRF();
$.ajax({
url: window.location.pathname + "products/",
method: "PUT",
data: form,
contentType: false,
processData: false,
success: function (data) {
alert(data["product"] + " edited");
location.reload();
},
error: function (data) {
if (data.responseJSON) {
displayErrors(data.responseJSON);
}
}
views.py
@staticmethod
def put(request, stall_id):
dict = {
"product_name": request.body('name'),
"description": request.body('description'),
"price": request.body('price'),
"quantity": request.body('quantity')
}
errors = handle_errors(dict)
print(errors)
if not errors:
product = Product.objects.get(id=request.POST.get("product_id"))
product.name = dict["product_name"]
product.description = dict["description"]
product.price = dict["price"]
product.quantity = dict["quantity"]
if 'photo' in request.FILES:
product.photo = request.FILES.get('photo')
product.save()
data = {
"product": product.name
}
return HttpResponse(
json.dumps(data),
content_type="application/json"
)
return HttpResponse(
json.dumps(errors),
content_type="application/json",
status=400
)
「PUT」と「POST」の両方の方法では、データは同じ方法で渡され、「print request.data」を試して、データが来るのを見てください。 PUTとPOSTには 'request.data ['keyName']'を使います。 –