Django按相关模型排序查询

时间:2020-05-10 08:07:05

标签: python django

我正在尝试在Django函数视图中基于相关模型对查询集进行排序。

我的模特是:

class Musician(models.Model):
    full_name = models.CharField(max_length = 70)
    def __str__(self):
        return str(self.full_name)

class Instrument(models.Model):
    instrument_name = models.CharField(max_length = 50)
    def __str__(self):
        return self.instrument_name

class Member(models.Model):
    musician = models.ForeignKey(Musician, on_delete = models.CASCADE)
    band = models.ForeignKey(Band, on_delete = models.CASCADE)
    def __str__(self):
        return str(self.musician)

class Role(models.Model):
    instrument = models.ForeignKey(Instrument, on_delete = models.CASCADE)
    member = models.ForeignKey(Member, on_delete = models.CASCADE)
    def __str__(self):
        return str(self.member) +   ' | ' + str( self.instrument)

class Album(models.Model):
    album_name = models.CharField(max_length = 50)
    band = models.ForeignKey(Band, on_delete = models.CASCADE)
    role = models.ManyToManyField(Role)
    def __str__(self):
        return self.album_name + ' | ' + str( self.band)

我的函数看起来像这样(将相册ID传递给函数):

def album_view(request, alb_id):
    album = Album.objects.get(id= alb_id)
    band = album.band
    allroles = album.role.all()
    context = {
        'band' : band,
        'album' : album,
        'artists' : allroles,
    return render(request,'bandapp/album_view.html', context)

allroles是我遇到问题的查询。 它返回Role对象(如预期的那样),但是,此列表很难在模板中进行迭代。 我本质上想结束于(在模板内) 艺术家一|吉他, 艺术家一|人声 艺术家二|鼓 艺术家三|低音, 艺术家三|打击乐

但是由于我无法按音乐家对allroles进行排序,因此无法按创建顺序正确地迭代它们。 这可能导致: 艺术家一|吉他, 艺术家三|低音, 艺术家二|鼓 艺术家三|打击乐器, 艺术家一|人声

关系是 专辑->角色->成员->音乐家 (成员将以表格的形式来指示是否可以通过乐队ID将其选作专辑中的成员)。

最终,我希望它以艺术家1(吉他,人声),艺术家2(鼓),艺术家3(低音,打击乐)的形式显示在页面上

任何帮助都将不胜感激,因为我无法完全理解它以使其正常工作。所有其他方面都可以正常工作。

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为在外键关系中使用order by应该不会有任何问题。

allroles = album.role.all().order_by('member__musician__full_name')
相关问题