形式的Django数据不显示POST

时间:2017-08-25 16:10:55

标签: python django django-forms django-templates django-views

我目前有一个UpdateView和一个按钮来编辑字段中的数据,但由于某些原因,单击我的编辑按钮时数据没有显示。它显示了一堆空字段,除非我转到地址栏并按Enter键,基本上请求同一页面。然后显示所有数据。

单击编辑时不起作用,按下输入地址栏时起作用:

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

如果我将更新表单方法更改为GET而不是POST,那么当我点击按钮时它会起作用,但我的地址栏会显示如下。

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

我也尝试将{{ form.as_p }}POST一起使用,但这也没有显示数据。

1 个答案:

答案 0 :(得分:0)

根据我的理解(原谅我,如果我弄错了), index.html 中的编辑按钮可以帮助您获得编辑表格。模型实例(产品)的初始数据(预填充)。

如果按钮只是为了获取 UpdateView 的形式,那么,

为什么首先将编辑按钮放在<form>标记中,并带有method="post"? “编辑”按钮只需要将信息存储在模型实例中。

除此之外,为什么还需要 POST请求获取表格来更新产品(型号=产品)。

要获取信息,使用 POST 请求是不明智的。

另一个注意事项我希望您意识到{% csrf_token %}令牌仅适用于 POST 请求。根本不需要{% csrf_token %}

如果您只需要/inventory/update/7这样的网址,那么为什么不使用<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>

我希望这会对你有所帮助。如果我的问题不正确,请纠正我。感谢。