Django - ModelForm - UpdateView -pk - PullRequest
       6

Django - ModelForm - UpdateView -pk

0 голосов
/ 03 марта 2019

Я хотел бы реализовать 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>

Я получаю следующую ошибку: «Общий подробный вид CashFlowUpdate должен вызываться либо с объектом pk, либо слизнем в URLconf»., что означает, что мне нужно передать первичный ключ объекта, который я хочу обновить ... Каков наилучший способ сделать это?В настоящее время все мои объекты отображаются в виде таблицы (см. Ниже)?Я мог бы добавить столбец с URL-ссылкой "Изменить", но как поставить ПК в нем?

  <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 голосов
/ 03 марта 2019

Как и в сообщении об ошибке:

Общее подробное представление CashFlowUpdate должен вызываться с объектом pk или слагом в URLconf.

Представление обновления обычно требуеткакой-то параметр URL, чтобы определить, какой объект обновлять.Он неявно стремится проверить два поля: слаг и первичный ключ.Но здесь, в вашем urls.py, вы использовали fdslug в качестве параметра URL.

Это можно легко решить, указав slug_url_kwarg [Django-doc] себя, например:

class CashFlowUpdate(UpdateView):
    model = CashFlow
    fields = ['amount', 'description']
    <b>slug_url_kwarg = 'fdslug'</b>

Что касается ссылки для редактирования, вы можете добавить тег шаблона {% url ... %}, например:

<td><a href="<b>{% url 'update_cashflow' fdslug=cashflow.slug %}</b>">edit</a></td>
...