2017-07-05 6 views
0

データフォームに格納されたデータにアクセスする際に現在問題が発生しています。私はそれを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 
    ) 
+0

「PUT」と「POST」の両方の方法では、データは同じ方法で渡され、「print request.data」を試して、データが来るのを見てください。 PUTとPOSTには 'request.data ['keyName']'を使います。 –

答えて

0

x-www-form-urlencodedを介してデータを送信するとき、それはバイトとしてrequest.body下で到着するように見えます。

は**私はテスト目的のためにすることを使用してコードでcsrf_exemptを使用しないでください**

以下の私の作品:。

from django.http import QueryDict 


class Some(View): 
    @csrf_exempt 
    def dispatch(self, request, *args, **kwargs): 
     return super().dispatch(request, *args, *kwargs) 

    def put(self, request, *args, **kwargs): 
     data = QueryDict(request.body) 
     print(data) 
     return HttpResponse("Worked!") 

data変数はそうあなたdictです

+0

お返事ありがとうございます!私は実際に私のajaxでフォームを送信しているものを編集しました。それはまだ同じに働くだろうか?フォームの中に想像がついていると、おそらく私の問題を引き起こしているでしょう。 – Jason

+0

'QueryDict'オブジェクトで' request.body'というフォームを解析し、それがうまくいくかどうかを確認してください.dict構文を使ってデータにアクセスするコードを更新してください。 '[ key_name] 'または' .get(key_name) 'を使用します。 –

+0

ああ、私はそれについて完全に忘れてありがとう!私はそれをパラメータを持つ関数としてアクセスしようとしました – Jason

関連する問題