【问题标题】:Update / edit django object after selecting it from a dropdown list从下拉列表中选择它后更新/编辑 django 对象
【发布时间】:2019-06-14 17:15:45
【问题描述】:

我想在从下拉列表或自动完成列表中选择产品后单击表单按钮 (UPDATE) 从页面更新/编辑产品。

List.html 页面工作正常,而单击更新按钮 update.html 页面无法解析 POST 数据。 手动我可以使用 pk 后缀(/update/1/)访问update.html,它也可以正常工作。

如何将 pk 的值单独传递给 url?

views.py

class ProductUpdateView(UpdateView):
    template_name = 'update.html'
    model = Product
    fields = ['name', 'description', 'image', 'file',]
    success_url = '/list/'

class ProductsView(ListView,):
    template_name = 'list.html'
    model = Product

urls.py

urlpatterns = [
    url(r'^list/$', ProductsView.as_view(), name='list'),
    url(r'^update/(?P<pk>[0-9]+)/$', ProductUpdateView.as_view(), name='update'),
]

list.html

<body>
 <form method='POST' action='/update/'> {% csrf_token %}
  <select name='pk'>
   {% for obj in object_list %}
    <option value='{{ obj.id }}'>{{ obj.name }}</option>    
   {% endfor %}
  </select>
  <input type="submit" value='UPDATE'>
 </form>
</body>

【问题讨论】:

  • 您可以在选择框的更改事件上发出ajax请求。
  • 您的问题中没有包含update.html 页面。告诉我们你是如何更新你的 html 的。

标签: django forms post


【解决方案1】:

您只能使用&lt;select&gt; 来做到这一点

<select name="select_path" id="select_path"
  ONCHANGE="location = this.options[this.selectedIndex].value;">
  {% for obj in object_list %}
   <option value="{% url app_name:update obj.id %}">{{ obj.name }} 
   </option>
  {% endfor %}
</select>

您只需要更改选项值,我不知道确切的网址,tewak 根据您的要求。

【讨论】:

  • 这个在选择一个值时有效,因此对于初始值它不起作用。从下拉列表中选择值实际上是不切实际的,我们需要一个自动完成框和提交按钮来从 100 个选择值中进行选择。谢谢,无论如何都是不错的尝试,它仅在选择更改时才有效。
  • 使用下面的代码我们可以做同样的事情而没有初始值问题。 ` `
【解决方案2】:

我知道这有点晚了,但这个答案肯定会对某人有所帮助。

<select name="select_path" id="select_path">
  <option value="{{ initial_value }}">{{ initial_value name }}</option>
  {% for obj in object_list %}
   <option value="{{ edited object value }}">{{ edited obj.name }} 
   </option>
  {% endfor %}
</select>

像保存表单时一样正常获取值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2018-01-29
    • 2015-03-25
    • 2019-07-08
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多