2017-08-25 21 views
0

現在、UpdateViewとフィールド内のデータを編集するボタンがありますが、何らかの理由で編集ボタンをクリックしてもデータが表示されません。それは私がアドレスバーに移動し、Enterキーを押すと、基本的に同じページを要求しない限り、空のフィールドの束を示しています。すべてのデータが表示されます。フォームのDjangoデータがPOSTで表示されない

動作しません私は、[編集]をクリックし、私はアドレスバーに入力した押したときに動作します:

/inventory/update/7/ 

views.py

class ProductUpdate(UpdateView): 
model = Product 
fields = [ 
    'manufacturer', 
    'part_number', 
    'description', 
    'vendor', 
    'upc', 
    'stock_quantity', 
    'unit_cost', 
    'sale_price', 
] 

urls.py

# /inventory/update/<pk> 
    url(r'update/(?P<pk>[0-9]+)/$', views.ProductUpdate.as_view(), name='product-update'), 

インデックス.html

<div class="col-sm-6"> 
    <ul class="list-group"> 
     {% for product in all_products %} 
      <li class="list-group-item"> 
       <a href="{% url 'inventory:product_detail' product.id %}"><span style="font-size: 1.6em;">{{ product.manufacturer }}: {{ product.part_number }}</span></a> 

       <form action="{% url 'inventory:product-delete' product.id %}" method="post" style="display: inline"> 
       {% csrf_token %} 
        <button type="submit" class="btn btn-danger btn-sm float-right" style="margin-left: 10px; margin-top: 4px;">Delete</button> 
       </form> 

       <form action="{% url 'inventory:product-update' product.id %}" method="post" style="display: inline"> 
       {% csrf_token %} 
        <button type="submit" class="btn btn-warning btn-sm float-right" style="margin-top: 4px;">Edit</button> 
       </form> 
      </li> 
     {% endfor %} 
    </ul> 
</div> 

POSTではなく、更新フォームの方法をGETに変更すると、ボタンをクリックすると機能しますが、アドレスバーがこのように表示されます。

/inventory/update/7/?csrfmiddlewaretoken=34WWjKDIDsNpZdmEmef9cr3tCoCO0V7jO3uks5qXFzSVKu1uAklqUA3ihaGBGaRK 

私はまたPOST{{ form.as_p }}を使用してみましたが、それは、データがいずれかの表示しませんでした。の私が理解できるものから、

答えて

0

(私はそれが間違って得たなら、私はご容赦)、あなたのindex.htmlを内部編集ボタンが初期データであなたの編集フォームを取得する目的をお楽しみいただけます(事前に充填されました)モデルインスタンス(製品)。

ボタンは、単にその後、UpdateViewの形態がフェッチする場合は、

は、なぜあなたは最初の場所でmethod="post"<form>タグ内で編集ボタンを入れていますか?編集ボタンは、単にモデルインスタンス内に保存された情報を持って来る必要があります。このほかに

は、なぜあなたはPOSTリクエストが必要なのかに製品(モデル=製品)を更新するためのフォームを取得します。

この情報を取得するには、POSTリクエストを使用することは賢明ではありません。

別のノート私はあなたが{% csrf_token %}トークンのみPOST要求のために意図されていることを実現したいと考えています。 {% csrf_token %}の必要は全くありません。

/inventory/update/7のようなURLが必要な場合は、代わりに<a>タグを使用してください。私はこれがあなたの役に立てば幸い

<div class="col-sm-6"> 
<ul class="list-group"> 
    {% for product in all_products %} 
     <li class="list-group-item"> 
      <a href="{% url 'inventory:product_detail' product.id %}"><span style="font-size: 1.6em;">{{ product.manufacturer }}: {{ product.part_number }}</span></a> 

      <a href="{% url 'inventory:product-delete' product.id %}">Delete</a> 

      <a href="{% url 'inventory:product-update' product.id %}">Edit</a> 
     </li> 
    {% endfor %} 
</ul> 
</div> 

はこれを試してみてください。あなたの問題が間違っていたら私を訂正してください。ありがとう。

+0

私は気づいていませんでした!これは完全に動作し、私の質問への答えです!私はフォームを使ってデータを要求する必要があると思っていました... –

関連する問題