Django模型选择和jQuery数据表排序

jvlzgdj9  于 2023-02-03  发布在  jQuery
关注(0)|答案(1)|浏览(137)

当我想在django模型中基于选择对对象进行排序时,我很难在jQuery DataTables中使用排序功能。使用包含的代码片段,我可以基于选择中的值1..n对它进行排序,但由于它将这些值视为字符串,排序无法正常工作。它认为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数据表中:

<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>
5tmbdcev

5tmbdcev1#

对于这种情况有两种解决方案:

  • 我对JavaScript不是很熟悉,但是我相信你可以找到一些插件来处理这样的情况。看看这个插件是如何处理排序中的有序数字(1st,2nd,...)的(来自SO)!
    **更新:**显然natsort完成了这项工作(from comments on this question
  • 你可以在排序之前把文本解析成一个数字。看看this question

相关问题