订购ManyToMany关系,Django

时间:2015-08-13 02:12:07

标签: django django-models django-1.8

使用这些模型:

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):              
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):              
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    order_index = models.IntegerField(unique=True)

    class Meta:
        ordering = ['order_index']

我一直在尝试使用以下代码:

group = Group.objects.get(id=1)
group.members.all() # I want the resulting membership objects to ordered by order_index as default.

这可能吗?类似questions的答案要求您撰写group.members.all().order_by(...)。我想要它,所以结果默认按order_index排序。

1 个答案:

答案 0 :(得分:0)

这是您获取用户的方式,然后是与该用户关联的成员通过date_joined对其进行排序。不知道你会如何自动完成,因为排序通常是由pk值决定的,我假设它与加入的日期相对应,因为后来加入的pk越高。

user = Person.objects.get(pk=request.user.id)
get_members =  user.group.members.all().order_by('date_joined')