【问题标题】:Django sort query by related modelDjango按相关模型排序查询
【发布时间】: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 被选为专辑的工作人员)..

最终,我希望它在页面上显示为艺术家一(吉他、声乐)、艺术家二(鼓)、艺术家三(贝斯、打击乐)

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

提前致谢。

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    allroles = album.role.all().order_by('member__musician__full_name')
    

    【讨论】:

    • 问题是他不希望它按字母顺序排序,例如他想要1. Guitar -> 2. Vocals -> Drums -> Bass -> Percussion。
    • 不好意思,我还是不太明白,有没有他想要的具体顺序??还是他想根据音乐家,根据示例对乐器进行分组。 Artist One | Guitar, Artist One | Vocals, Artist Two | Drums, Artist Three | Bass, Artist Three | Percussion 在这里他也可以按多列排序。 order_by('member__musician__full_name', 'instrument __instrument_name ')
    • @neeraj9194 非常感谢!!我不知道把垃圾放在哪里,效果很好!!感谢您的帮助(这里是 CS 一年级学生):)
    猜你喜欢
    • 2015-08-31
    • 2019-09-16
    • 1970-01-01
    • 2013-04-02
    • 2015-02-18
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多