Django-ModelForm-UpdateView -pk

时间:2019-03-03 08:12:10

标签: django primary-key

我想实现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>

非常感谢

1 个答案:

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