我正在尝试在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(低音,打击乐)的形式显示在页面上
任何帮助都将不胜感激,因为我无法完全理解它以使其正常工作。所有其他方面都可以正常工作。
谢谢。
答案 0 :(得分:0)
我认为在外键关系中使用order by应该不会有任何问题。
allroles = album.role.all().order_by('member__musician__full_name')