Домен Django ManyToManyField с использованием?

Вот фрагмент того, как мои модели настроены:

class Profile(models.Model): name = models.CharField(max_length=32) accout = models.ManyToManyField( 'project.Account', through='project.ProfileAccount' ) def __unicode__(self) return self.name class Accounts(models.Model): name = models.CharField(max_length=32) type = models.CharField(max_length=32) class Meta: ordering = ('name',) def __unicode__(self) return self.name class ProfileAccounts(models.Model): profile = models.ForeignKey('project.Profile') account = models.ForeignKey('project.Accounts') number = models.PositiveIntegerField() class Meta: ordering = ('number',) 

Затем, когда я получаю доступ к учетным записям, как я могу сортировать по «номеру» в промежуточной модели ProfileAccounts, а не по умолчанию «имя» в модели учетных записей ?:

 for acct_number in self.profile.accounts.all(): pass 

Это не работает, но суть в том, как я хочу, чтобы он обращался к этим данным:

 for scanline_field in self.scanline_profile.fields.all().order_by('number'): pass 

6 Solutions collect form web for “Домен Django ManyToManyField с использованием?”

Я только что это понял.

 class Profile(models.Model): accounts = models.ManyToManyField('project.Account', through='project.ProfileAccount') def get_accounts(self): return self.accounts.order_by('link_to_profile') class Account(models.Model): name = models.CharField(max_length=32) class ProfileAccount(models.Model): profile = models.ForeignKey('project.Profile') account = models.ForeignKey('project.Account', related_name='link_to_profile') number = models.PositiveIntegerField() class Meta: ordering = ('number',) 

Я удалил поля, которые были вне темы, кроме Article.name . Это кратчайшее решение, которое я нашел, не знаю, можно ли было использовать его в 2010 году, но это, безусловно, сейчас.

Менеджер ManyToManyField позволяет вам напрямую выбирать / фильтровать данные из соответствующей модели, не используя какое-либо подключение модели сквозной модели на уровне django …

Точно так же,

Если вы пытаетесь:

 pr = Profile.objects.get(pk=1) pr.account.all() 

возвращает вам всю учетную запись, связанную с этим профилем. Как вы видите, нет прямого отношения к сквозной модели ProfileAccount, поэтому вы не можете использовать отношение M2M в этой точке … Вы должны использовать обратное отношение к сквозной модели и фильтровать результаты …

 pr = Profile.objects.get(pk=1) pr.profileaccount_set.order_by('number') 

предоставит вам упорядоченный набор запросов, но в этом случае то, что у вас есть в наборе запросов, – объекты profileaccount, а не объекты учетной записи … Поэтому вам нужно использовать другое отношение уровня django для перехода к каждой связанной учетной записи:

 pr = Profile.objects.get(pk=1) for pacc in pr.profileaccount_set.order_by('number'): pacc.account 

Добавьте связанное имя в ProfileAccounts, а затем измените порядок в Accounts с этим «related_name__number». Обратите внимание на два подчеркивания между родственным именем и номером. Смотри ниже:

 class Accounts(models.Model): . . . class Meta: ordering = ('profile_accounts__number',) class ProfileAccounts(models.Model): . . . account = models.ForeignKey('project.Accounts', related_name='profile_accounts') number = models.PositiveIntegerField() class Meta: ordering = ('number',) 

В профиле есть опечатка (это «accout», когда я думаю, что вы имеете в виду «учетную запись»), но что более важно, у вас есть смешанные формы с единым числом или множественным числом в модели.

В Django практика, как правило, называет ваши классы уникальными, а ваш ManyToManyField называет множественное число. Так:

 class Profile(models.Model): name = models.CharField(max_length=32) accounts = models.ManyToManyField( 'Account', through='ProfileAccount' ) def __unicode__(self) return self.name class Account(models.Model): name = models.CharField(max_length=32) type = models.CharField(max_length=32) class Meta: ordering = ('name',) def __unicode__(self) return self.name class ProfileAccount(models.Model): profile = models.ForeignKey(Profile) account = models.ForeignKey(Account) number = models.PositiveIntegerField() class Meta: ordering = ('number',) 

Я немного смущен тем, что вы пытаетесь сделать с этой моделью, но если вы вносите эти изменения, то for acct_number in self.profile.accounts.all().order_by('number'): должен работать. Предполагая никаких других проблем.

Это сработало для меня:

 Profile.objects.account.order_by('profileaccounts') 

Кажется, что самое простое решение для этой конкретной проблемы

 for acct in self.profile.accounts.order_by('profileaccounts'): pass 
  • Отладка django-allauth Ошибка входа в сеть в социальных сетях
  • Разделение бизнес-логики и доступа к данным в django
  • Получение «не существует или является ошибкой m2m» на моем uuid (первичный ключ) при попытке сохранить в DRF
  • Предотвращение django из добавления «_id» в поле внешнего ключа
  • Django: как сделать get_or_create () в потоковом режиме?
  • Как получить доступ к определенному start_url в Scroll CrawlSpider?
  • Django: Любой способ изменить свойство «upload_to» FileField, не прибегая к магии?
  • django просмотров - 502 плохой шлюз
  • Django: быстрое получение идентификаторов многих многопользовательских полей
  • Название проекта и имя приложения в Django
  • Создайте граф из файла CSV и отрисуйте в браузер с помощью Django и библиотеки Pandas Python
  •  
    Interesting Posts for Van-Lav

    Одна вторичная метка отсутствует при построении дополнительной оси x и y

    Краткий способ удаления элементов из списка по индексу в Python

    Как округлить десятичный знак Python до двух знаков после запятой?

    Почему ~ True приводит к -2?

    Как избежать вызовов os.system () в Python?

    scipy.interpolate.UnivariateSpline не сглаживается независимо от параметров

    Улучшение использования памяти в массиве, чтобы избежать блочной обработки

    удаление пар элементов из массивов numpy, которые являются NaN (или другое значение) в Python

    Python 2.7.3 + OpenCV 2.4 после поворота не подходит Изображение

    Проецирование координат в массиве Numpy

    Использование Sci-Kit позволяет классифицировать текст с большим корпусом

    В Python, как я могу проверить, существует ли накопитель без бросания ошибки для съемных дисков?

    Pandas и Matplotlib – fill_between () vs datetime64

    Проверьте, находится ли строка в CSV

    Использование меньших операций с хранилищем данных в appengine

    Python - лучший язык программирования в мире.