【问题标题】:Order a ManyToMany relationship, Django订购多对多关系,Django
【发布时间】:2015-11-05 20:11:34
【问题描述】:

使用这些模型:

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 排序。

【问题讨论】:

  • 您需要为 Person 提供 date_joined 属性并在表单中设置一个值,或者在模型中将此参数用于 date_joined 属性 auto_add_now=True。然后参考下面我的回答。

标签: django django-models django-1.8


【解决方案1】:

这是您获取用户的方式,然后是与该用户关联的成员按 date_joined 对其进行排序。不确定如何自动执行此操作,因为排序通常是 pk 值,我假设它与加入日期相对应,因为 pk 越高,以后加入。

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

【讨论】:

  • 呃。复制/粘贴代码是我的错。如果我实际上是在使用 date_joined 这将起作用。不幸的是,我实际上使用的是用户设置值。我已经更新了原始帖子以反映这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多