我想实现UpdateView以便更新模型的选定对象。
当前,我有:
views.py
def fd_detail(request, fdslug):
fddetail = Fd.objects.get(slug=fdslug)
cffilter = CashFlowFilter(request.GET, queryset=CashFlow.objects.filter(feeder__slug=fdslug))
return render(request, 'fd/fd_detail.html',
{'fddetail': fddetail,
'cffilter': cffilter,
})
class CashFlowUpdate(UpdateView):
model = CashFlow
fields = ['amount', 'description']
url.py
path('<slug:fdslug>/updatecashflow/', views.CashFlowUpdate.as_view(),name = "update_cashflow"),
path('<slug:fdslug>/', views.fd_detail, name="fd_detail")
update_cashflow.html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update">
</form>
我收到以下错误:“必须在URLconf中使用对象pk或slug调用通用详细视图CashFlowUpdate。” ,这意味着我需要传递要更新的对象的主键...最佳方法是什么?目前,我所有的对象都是通过表格显示的(见下文)?我可以添加带有网址链接“编辑”的列,但是如何将pk放入其中?
<table class="table table-bordered">
<thead>
<tr>
<th>Amount</th>
<th>Description</th>
<th>Edit</th>
</tr>
</thead>
<tbody>
{% for cashflow in cffilter.qs %}
<tr>
<td> {{cashflow.amount}} </td>
<td> {{cashflow.description}} </td>
<td> ?????? </td>
</tr>
{% empty %}
<tr>
<td colspan="5"> No cashflow matches your search criteria</td>
</tr>
{% endfor %}
</tbody>
</table>
非常感谢
答案 0 :(得分:0)
就像错误提示:
一般详细信息视图CashFlowUpdate必须使用URLconf中的对象pk或子弹调用。
更新视图通常需要某种URL参数来确定要更新的对象。它隐式地旨在检查两个字段:子段和主键。但是在您的urls.py
中,您使用fdslug
作为URL参数。
您可以通过自己指定slug_url_kwarg
[Django-doc]来轻松解决此问题,例如:
class CashFlowUpdate(UpdateView):
model = CashFlow
fields = ['amount', 'description']
slug_url_kwarg = 'fdslug'
对于编辑链接,您可以添加{% url ... %}
模板标签,例如:
<td><a href="{% url 'update_cashflow' fdslug=cashflow.slug %}">edit</a></td>