Произвольно установить позицию / порядок поля ManyToMany в django admin? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть следующие модели:

# Child
class Media (models.Model):
    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=128,unique=True)
    file = models.FileField()
    enabled = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
    return self.name

# Parent
class Gallery(models.Model):
    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=128,unique=True)
    description = models.TextField(max_length=254,null=True)
    medias = models.ManyToManyField(Media,related_name='medias')
    enabled = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    class Meta:
        verbose_name = "gallery"
        verbose_name_plural = "galleries"
    def __str__(self):
        return self.name

Я бы хотел отсортировать дочернюю таблицу, установив ее в соединительной таблице; поэтому не влияет на дочернюю таблицу. Я думаю о настройке поля положения в соединительной таблице, вручную ли добавить его в БД единственный способ сделать это? Я довольно новичок в Django и заранее прошу прощения, если это просто базовый c вопрос.

1 Ответ

0 голосов
/ 08 апреля 2020

Обычный ManyToMany здесь не работает, потому что таблица ассоциации должна содержать порядок. Итак, в этом случае вы должны привести through к миксу:

class Gallery(models.Model):
    medias = models.ManyToManyField('Media',related_name='medias', through='ChildGallery')

Где ChildGallery - это модель соединения:

class ChildGallery(models.Model):
    child = models.ForeignKey(Child)
    gallery = models.ForeignKey(Gallery)
    order = models.IntegerField()

    class Meta:
        ordering = ['order'] 

Я не знаю, как вы это сделаете нравится реализовывать порядок, но если это просто число, вы можете использовать IntegerField, как я показал выше.

PS Примечание. Все модели ассоциаций заключены в кавычки (например, 'Child', а не Child). Это позволяет нарушать круговые зависимости, поэтому я рекомендую использовать этот способ

...