2017-08-25 2 views
0

J'ai actuellement un UpdateView et un bouton pour éditer les données dans les champs, mais pour une raison quelconque, les données ne sont pas affichées lorsque je clique sur mon bouton d'édition. Il montre un tas de champs vides, sauf si je vais à la barre d'adresse et appuyez sur Entrée, demandant essentiellement la même page. Ensuite, toutes les données apparaissent.Les données Django sous forme ne s'affichent pas avec POST

ne fonctionne pas lorsque je clique sur Modifier, quand je travaille appuyez sur Entrée dans la barre d'adresse:

/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'), 

index .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> 

Si je change la méthode de formulaire de mise à jour à GET au lieu de POST alors cela fonctionne quand je clique sur le bouton, mais ma barre d'adresse apparaît comme ceci.

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

J'ai essayé également d'utiliser le {{ form.as_p }} avec POST mais qui n'a pas fait les données apparaissent non plus.

Répondre

0

D'après ce que je comprends (pardonnez-moi si je me trompe), le bouton Modifier dans votre index.html sert le but de vous obtenir un formulaire de modification des données initiales (pré-remplie) d'un instance de modèle (produit).

Si le bouton est là pour chercher simplement une forme de UpdateView puis,

pourquoi mettez-vous sur le bouton modifier dans la balise <form> avec method="post" en premier lieu? Le bouton Modifier a simplement besoin d'apporter les informations stockées dans une instance de modèle.

En outre, pourquoi avez-vous besoin d'une demande POST pour obtenir la forme de mise à jour d'un produit (modèle = produit). Pour obtenir les informations, il est déconseillé d'utiliser une demande POST.

Une autre note J'espère que vous vous rendez compte que {% csrf_token %} jeton ne sont destiné à requêtes POST. Il n'y a pas besoin de {% csrf_token %} du tout.

Lorsque vous avez juste besoin d'une URL comme: /inventory/update/7 alors pourquoi ne pas utiliser un tag <a> à la place?

Essayez ceci:

<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> 

J'espère que cela vous aide. Corrigez-moi si j'ai mal compris votre problème. Merci.

+0

Saint muet je ne savais même pas! Cela fonctionne parfaitement et est la réponse à ma question! Je pensais que j'avais besoin d'utiliser un formulaire pour demander des données ... –