0ralo
@0ralo
Python backend developer

Как настроить порядок m2m postgres\django?

Короче вопрос такой, есть у меня 2 модели Курс и программы. У курса может быть [0; inf) программ, поэтому решил сделать связь m2m. Но вот только порядок программ - важен, а m2m забивает на него. Хотелось бы чтобы без сотен строк кода было реализовано порядковое выведение программ + в админке можно было редактировать. Возможно ли такое сделать из коробки джанго?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Реляционные базы данных в принципе забивают на порядок следования если Вы не укажете его явно
Create table course (
    id serial primary key,
    name text
);

Create table programm (
    id serial primary key,
    name text
);

Create table course_programms (
    cource_id  int references course(id),
    progamm_id int references programm(id),
    programm_order int,
    primary key (cource_id, progamm_id)
);


https://sqlize.online/sql/psql15/80734971e42d99071...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Realmixer
Full stack Python (Django) web-developer
Для связей m2m автоматически создаётся промежуточная модель, содержащая лишь два поля для связи с обоими таблицами. Эту модель можно создать явно, указав дополнительные поля:
class Course(models.Model):
    name = models.CharField()
    programs = models.ManyToManyField('Program', through='ProgramCourse', related_name='courses')

class Program(models.Model):
    name = models.CharField()

class ProgramCourse(models.Model):
    program = models.ForeignKey(Program, on_delete=models.CASCADE)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    order = models.IntegerField()  # Дополнительное поле для сортировки

Но в данном конкретном случае я думаю подойдёт готовое решение: https://github.com/jazzband/django-sortedm2m
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы