【发布时间】:2020-05-10 08:07:05
【问题描述】:
我正在尝试根据 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 被选为专辑的工作人员)..
最终,我希望它在页面上显示为艺术家一(吉他、声乐)、艺术家二(鼓)、艺术家三(贝斯、打击乐)
非常感谢任何帮助,因为我无法完全理解它以使其工作。所有其他方面都可以正常工作。
提前致谢。
【问题讨论】: