NoReverseMatch в Ajax Reorder

Я столкнулся со следующей проблемой при реализации Ajax представления переупорядочивания в моем приложении. По сути, мое приложение - это просто таблица, которую можно фильтровать, переупорядочивать и выполнять CRUD-функции. Когда я применил представление фильтрации, переупорядочивание больше не работает.

Вы должны иметь возможность обновлять рейтинг каждого ряда на основе перетаскивания ряда вверх/вниз

ajax:

class AjaxReorderView(View):
    def post(self, *args, **kwargs):
        if self.request.is_ajax():
            data = dict()
            try:
                list = json.loads(self.request.body)
                model = string_to_model(self.kwargs['model'])
                objects = model.objects.filter(pk__in=list)
                # list = {k:i+1 for i,k in enumerate(list)}
                for object in objects:
                    object.rank = list.index(str(object.pk)) + 1
                model.objects.bulk_update(objects, ['rank'])
                # for key, value in enumerate(list):
                #     model.objects.filter(pk=value).update(order=key + 1)
                message = 'Successful reorder list.'
                data['is_valid'] = True
            # except KeyError:
            #     HttpResponseServerError("Malformed data!")
            except:
                message = 'Internal error!'
                data['is_valid'] = False
            finally:
                data['message'] = message
                return JsonResponse(data)
        else:
            return JsonResponse({"is_valid": False}, status=400)

pick_list:

{% extends 'base.html' %}
{% load cms_tags %}
{% block title %} {{ title }} · {{ block.super }} {% endblock title %}
{% block content %}    

<div style="font-size:24px">
  {{ title }}
</div>

<div style="font-size:14px; margin-bottom:15px">
  Click on the arrows on the right of each contestant and drag them up or down to reorder them based on how far you think they are going to go. 
</div>

<form method="get">
  {{ myFilter.form }}
  <button type="submit">Search</button>
</form>
<ul>

<table class="table table-hover" id="table-ajax" style="background-color: white;">
  <thead  style="background-color: #de5246; color:white; border-bottom:white">
    <tr>
      {% comment %} <th></th> {% endcomment %}
      <th style="width: 50px; text-align: center;"></th>
      <th>Name</th>
      <th>Hometown</th>
      <th>Occupation</th>
      <th>Age</th>
      <th>Progress</th>
      <th style="width: 160px; text-align: center;">Rank</th>
    </tr>
  </thead>
  <tbody class="order" data-url="{% url 'cms:reorder' model_name %}">
    {% include 'app/filter_list.html' %}
  </tbody>
</table>


{% endblock %}

filter_list.html:

{% load static %}
{% load cms_tags %}



{% for order in orders %}

<tr id="{{ order.id }}">
    <td><img src="http://127.0.0.1:8000/media/files/{{ order.photo }}" width="50"/></td>
    <td><a href="" title="Leads" style="text-decoration: none">{{ order.name }}</a></td>
    <td>{{ order.hometown }}</td>
    <td>{{ order.occupation }}</td>
    <td>{{ order.age }}</td>
    <td>
        <div class="progress">
            <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="{{ order.age }}" aria-valuemin="0" aria-valuemax="100" style="width: 75%"></div>
        </div>
    </td>
    <td style="text-align: center;">
        <a href="" class="btn btn-sm border-0 reorder" title="Reorder">
            <i class="fa fa-sort text-secondary"></i></a>
    </td>
</tr>
{% empty %}
<tr class="table-warning nosort">
    <td colspan="100%" class="text-center"><small class="text-muted">No {{ model_verbose_name_plural|lower }}</small>
    </td>
</tr>
{% endfor %}
<tr class="table-light table-sm nosort">
    <td colspan="100%"><small class="text-muted">Total rows: {{ orders.count }}</small></td>
</tr>

урлы

app_name = 'cms'

urlpatterns = [
    path('ajax/reorder/<str:model>/', AjaxReorderView.as_view(), name='reorder'),
]

urls2

...
    path('picks/filter/', week, name="week"),
]

просмотров

def week(request):
    orders = Pick.objects.all()
    myFilter = PickFilter(request.GET, queryset=orders)
    orders = myFilter.qs
    context = {'orders':orders, 'myFilter':myFilter}
    return render(request, 'app/pick_list.html',context)

модели

class Pick(models.Model):

    submitter = models.CharField(max_length=50, verbose_name='Submitter', null=True, blank=True)
    week = models.CharField(max_length=50, verbose_name='Week', null=True, blank=True)
    name = models.CharField(max_length=50, verbose_name='Name', null=True, blank=True)
    photo = models.CharField(max_length=50, verbose_name='Photo', null=True, blank=True)
    #photo = models.ImageField(upload_to="media", max_length=500, verbose_name='Photo', null=True, blank=True)
    hometown = models.CharField(max_length=50, verbose_name='Hometown', null=True, blank=True)
    age = models.IntegerField(verbose_name='Age', null=True, blank=True)
    progress = models.IntegerField(verbose_name='Progress', null=True, blank=True)
    occupation = models.CharField(max_length=50, verbose_name='Occupation', null=True, blank=True)
    elim_week = models.CharField(max_length=50, verbose_name='Week Eliminated', null=True, blank=True)
    rank = OrderField(verbose_name='Rank', null=True, blank=True)

    def __str__(self):
        return self.name

    def get_fields(self):
        return [(field.verbose_name, field.value_from_object(self)) for field in self.__class__._meta.fields]
    
    def get_absolute_url(self):
        return reverse('app:pick-update', kwargs={'pk': self.pk})

    class Meta:
        db_table = 'pick'
        ordering = ['rank']
        verbose_name = 'Pick'
        verbose_name_plural = 'Picks'

error:

Вернуться на верх