Настроить изменение порядка ManyToManyField в Django - PullRequest
1 голос
/ 19 января 2012

У меня проблема с настройкой поля manytomany, возможно ли изменить порядок выбранных значений / данных?Пример:

class Author(models.Model):
author_name = models.CharField(max_length=100)

class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyField(Author)

Допустим, модель Автора имеет значения Джона Роулинга, Джеки Чана, Брюса Ли, Чака Норриса.Заказ будет основан на ID, верно?Могу ли я настроить его так, как я хочу, если какой из них будет выбран первым?Также, когда я настраиваю это, это не затронет другие Книги.Как у меня есть книга HP, и моим автором заказа будет Брюс Ли, Чак Норрис, Джек Роулинг и Джеки Чан.Затем в книге Джанго будут авторы заказов Джеки Чан, Брюс Ли, Чак Норрис и Джок Роулинг.

Каждая книга будет иметь свой собственный порядок.Это не будет глобальным.После того, как вы изменили порядок из 1-й книги, 2-я книга не будет изменена.Я надеюсь, что кто-то может мне помочь.Спасибо.

1 Ответ

0 голосов
/ 19 января 2012

Вы можете использовать Meta , заказывая .Например,

class Author(models.Model):
    author_name = models.CharField(max_length=100)

    class Meta:
         ordering = ['author_name']

Или наборы запросов order_by для конкретного запроса:

Author.objects.all().oreder_by('author_name')

Чтобы сделать то, что предложено ниже равноденствия, добавьте поле для упорядоченияметод, который учитывает это:

 class Book(models.Model):
     # ...
     authors_order = models.CharField(max_length=255)

     def get_ordered_authors(self):
         authors = self.authors.all()
         authors_by_id = [dict(author.id, author) for author in authors]
         for author_id in map(int, self.authors_order.split(",")):
             yield authors_by_id[author_id]

Вам также нужно будет реализовать логику, которая синхронизирует book.authors и book.authors_order при каждом изменении / установке порядка.

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