Как сделать так, чтобы два многозначных поля в модели имели разные значения

У меня есть две упрощенные модели, как показано ниже:

class Courses:
    name = models.CharField(_("Course name"), max_length=256)


class School:
    main_courses = models.ManyToManyField(_("Main Courses"), to="course.Courses", related_name="maincourses", blank=True)
    enhancement_courses = models.ManyToManyField(_("Enhancement Courses"), to="course.Courses" related_name="enhancementcourses", blank=True)

main_courses и enhancement_courses будут хранить список Courses. Но мне нужно убедиться, что их значения не будут равны. Например, если в школе_1, main_courses это математика, физика, то enhancement_courses не может быть этими значениями. Какой самый простой способ сделать это в django?

Вам просто нужны разные through модели для каждой из них:

class MainCourses(models.Model):
    name = models.CharField(_("Course name"), max_length=256)


class EnhancementCourses(models.Model):
    name = models.CharField(_("Course name"), max_length=256)


class School(models.Model):
    main_courses = models.ManyToManyField(_("Main Courses"), through="course.MainCourses", related_name="maincourses", blank=True)
    enhancement_courses = models.ManyToManyField(_("Enhancement Courses"), through="course.EnhancementCourses" related_name="enhancementcourses", blank=True)

UPDATE

Вы можете использовать абстрактные модели для моделей обоих курсов:

class BaseCourses(models.Model):
    name = models.CharField(_("Course name"), max_length=256)

    class Meta:
        abstract = True


class MainCourses(BaseCourses):
    pass


class EnhancementCourses(BaseCourses):
    pass


Вернуться на верх