Выбор модели Django и сортировка jQuery DataTables

Я пытаюсь заставить сортировку работать в jQuery DataTables, когда я хочу сортировать объекты на основе выбора в модели django. С помощью прилагаемых фрагментов я могу отсортировать их на основе значений 1...n в choices, но поскольку он рассматривает их как строки, сортировка не работает должным образом. Он считает 10, 11 и 12 более низкими, чем все значения от 2 до 9. Как я могу решить эту проблему?

У меня есть эта модель в моем приложении django:

class Action(models.Model):

    STATUS_CHOICES = (
        ('1', 'Status 1'),
        ('2', 'Status 2'),
        ('3', 'Status 3'),
        ('4', 'Status 4'),
        ('5', 'Status 5'),
        ('6', 'Status 6'),
        ('7', 'Status 7'),
        ('8', 'Status 8'),
        ('9', 'Status 9'),
        ('10', 'Status 10'),
        ('11', 'Status 11'),
        ('12', 'Status 12'),
    )

    status = models.CharField(max_length=100, choices=STATUS_CHOICES, default=1, verbose_name='Status')

Из представлений я буду рендерить все в свой шаблон:

def actions_view(request, *args, **kwargs):

    actions = Action.objects.all()

    context = {
        'actions':actions,
    }

    return render(request, "actions.html", context)

А в шаблоне все будет отображаться в jQuery datatatables:

<table id="actionTable" class="table table-striped">
    <thead>
        <tr>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        {% for action in actions %}
            <tr>
                <td><span style="display:none;">{{ action.status }}</span>{{ action.get_status_display }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>

<script>
    $(document).ready(function () {
        $('#actionTable').DataTable({
            fixedHeader: false,
            paging: false,
            searching: false,
            info: false,

            "language": {
                "zeroRecords": "No action",
            },
        });
    });
</script>

Вот три решения:

  1. Обычно вы можете обмануть шаблоны Django для преобразования строк в целые числа, добавляя 0 к строке, используя встроенный фильтр add (doc, SO). Вот пример:

    {{ my_string|add:"0" }}
    
  2. Сделайте так, как показано здесь. Таким образом, вы можете использовать целые числа вместо строк, содержащих числа, в ваших STATUS_CHOICES. Вот пример:

    One = 1
    
    STATUS_CHOICES = {
        (One, 'Status 1')
    }
    
  3. Я не настолько знаком с JS, но я уверен, что вы можете найти некоторые плагины для обработки подобных случаев. Просто посмотрите, как этот плагин обрабатывает упорядоченные числа (1-е, 2-е, ...) при сортировке (от SO)!

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