用等效的DRF替换Django Button数据网址

时间:2019-04-10 20:19:10

标签: python ajax django datatables django-rest-framework

我有一个DataTable,其中包含以下列定义,用于向每行添加一个按钮:

"columnDefs": [ {
                "targets": 11,
                "data": null,
                "defaultContent": "<button class='btn btn-warning btn-sm js-update-activity' data-url='https://server/platform/activities/104/update/'></button>"
            } ],

它有效,除了数字104是硬编码ID。普通的Django版本如下所示:

{% for activity in activities %}
  <tr>
    <td>{{ activity.id }}</td>
    <td>
      <button class="btn btn-warning btn-sm js-update-activity"
              data-url="{% url 'activity_update' activity.id %}">
      </button>
    </td>
  </tr>
{% endfor %}

activity_update是此URL的URL名称:

url(r'^platform/activities/(?P<pk>\d+)/update/$', views.activity_update, name='activity_update')

如果我在DRF版本中使用普通的Django版本,则会出现此错误:

Reverse for 'activity_update' with no arguments not found. 1 pattern(s) tried: ['platform/activities/(?P<pk>\\d+)/update/$']

很显然,activity.id没有在DRF视图中定义,因为数据是通过JSON端点流入的。因此,我需要弄清楚如何将DataTable行中的ID分配给data-url属性。

我尝试这样做...

  "columnDefs": [ {
    "targets": 11,
     "data": null,
     "render": function ( data, type, row ) {
            return "<button type='button' aria-label='update' class='btn btn-warning btn-sm js-update-activity' data-url='https://server/platform/activities/'" + row.id + "'/update/'></button>";
        },

...但是这导致请求仅转到https://server/platform/activities/,而忽略了data-url的其余部分。当我将row.id打印到控制台时,它为我提供了DataTable中可见的每一行的正确ID。

我将如何模仿按钮的纯Django版本,以便data-url正确返回DataTable每行的硬编码URL?

0 个答案:

没有答案