如何在Django中对模型输出进行排序?

时间:2017-02-26 12:46:45

标签: python django django-models django-templates django-views

我对django的开发很新,我希望有人可以帮助我。 我在一个视图和一个模板中有两个主要模型。 我的每个“主”模型都有自己的“子”模型(带有外键)。 我的输出很好,到目前为止一直有效。

我的问题是,我想按名称对我的第二个主要模型的子模型进行排序。这是可能的,或者我需要更改它?

在我的示例中,我想按名称对'occupant.last_name'进行排序。

我现在有一张照片:occupant.last_name

我的 models.py

class Management[...]
class Employee[...]

class Houses(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class Occupant(models.Model):
    house = models.ForeignKey(Houses, on_delete=models.CASCADE)
    last_name = models.CharField(max_length=50)
    first_name = models.CharField(max_length=50)
    room = models.IntegerField(default=0)

    def __str__(self):
        return self.first_name

我的 views.py

class IndexView(ListView):
    context_object_name = 'all_management_list'
    template_name = 'blackboard/index.html'
    queryset = Management.objects.order_by('order_number')

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['Houses'] = Houses.objects.all()
        # And so on for more models
        return context

我的 template.html

{% for houses in Houses %}
<h3>{{ houses.name }}</h3>
<table><tbody>
    {% for occupant in houses.occupant_set.all %}
    <tr>
        <td>{{ occupant.last_name }}, {{ occupant.first_name }}</td>
        <td>{{ occupant.room }}</td>
    </tr>
[...]

非常感谢你的帮助,抱歉我的英语不好。 :)

最诚挚的问候

borsTiHD

1 个答案:

答案 0 :(得分:2)

您可以按order_by()

对查询集进行排序

通过在类Meta

下添加此命令,使用last_name在模型中生成默认顺序
class Occupant(models.Model):
    house = models.ForeignKey(Houses, on_delete=models.CASCADE)
    last_name = models.CharField(max_length=50)
    first_name = models.CharField(max_length=50)
    room = models.IntegerField(default=0)

    def __str__(self):
       return self.first_name
    class Meta:
       ordering = ('last_name',)