Порядок отношений (ManyToMany) без дублирования записей django - PullRequest
0 голосов
/ 29 апреля 2018

В течение нескольких дней я пытался отсортировать серию запросов, передавая в качестве параметра objects.order_by ("отношение"). Different () типа "ManyToMany", но всегда дублируя запрос "x" числом отношений, последний является желаемым.

class Person(models.Model):
  name = models.CharField(max_length=200)
  groups = models.ManyToManyField('Group', through='GroupMember', related_name='people')

  class Meta:
      ordering = ['name']

  def __unicode__(self):
      return self.name

class Group(models.Model):
  name = models.CharField(max_length=200)

  class Meta:
      ordering = ['name']

  def __unicode__(self):
      return self.name

class GroupMember(models.Model):
  person = models.ForeignKey(Person, related_name='membership')
  group = models.ForeignKey(Group, related_name='membership')
  type = models.CharField(max_length=100)

  def __unicode__(self):
      return "%s is in group %s (as %s)" % (self.person, self.group, self.type)

# Create three people:
self.joe = Person.objects.create(name='Joe')

# And three groups:
self.jocks = Group.objects.create(name='Jocks')
self.nerds = Group.objects.create(name='Nerds')

GroupMember.objects.create(person=self.joe, group=self.jocks, type="admin")
GroupMember.objects.create(person=self.joe, group=self.nerds, type="owner")
GroupMember.objects.create(person=self.joe, group=self.nerds, type="member")

# Not work, recieve multiple queries duplicates.
# (alphabetical order)
# We need order_by GroupMember().type. "admin, member, owner,... "
Person.objects.all()\
             .order_by("membership__type")\
             .distinct("id")

Обратите внимание, что, хотя добавление «different ()» дублирует значения запроса, мой вопрос заключается в том, в чем причина и как ее решить. База данных, которую я использую PostgreSQL. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...