在@property中订购来自模型元选项的列表



我有这个型号:

class Author(models.Model):
class Meta:
app_label = 'myapp'
surname = models.CharField(max_length=255)
firstname = models.CharField(max_length=255)
extrainfo = models.CharField(max_length=255, blank=True, null=True)
def __str__(self):
return u"{0} {1} {2}".format(self.firstname,
self.surname,
self.extrainfo)
@property
def alpha_name(self):
return u"{0}, {1} {2}".format(self.surname, self.firstname, self.extrainfo)
class Meta:
ordering = [self.surname]
class Source(models.Model):
class Meta:
app_label = "bassculture"
short_title = models.CharField(max_length=255)
author = models.ForeignKey("myapp.Author", blank=True, null=True, on_delete=models.CASCADE,
related_name="sources")

视图:

def SourceList(request):
sources = Source.objects.all()
return render(request, 'source/source_list.html', {'sources': sources})

模板:

{% for source in sources %}
<tr>
<td>{{ source.author.alpha_name }}</td>
<td>{{ source.short_title }}</a></td>
<td>{{ source.date }}</td>
</tr>

在模板中,我希望alpha_name按姓氏排序。正如你所看到的,我确实把class Meta: ordering = ...放在了我的Author模型中。尽管如此,该模板呈现了按id排序的作者列表(我想是默认排序(。如何通过模型/视图订购?我知道|dictsort标签({% for source in sources|dictsort:"author.alpha_name" %}起作用(。不过,我希望让模型或视图对排序进行排序,将模板的逻辑降至最低。

最终,在生成查询集时,您需要根据该视图中的字段对查询集进行排序。您只能有一个默认的排序字段。

Source.objects.all().order_by('author__surname', 'author__firstname')

最新更新