2017-02-15 19 views
0

У меня есть следующие модели:ManyToManyField наряду с различным дополнительным значением для каждого

class Course(models.Model): 
    Name = CharField(max_length=32, unique=True,) 

class Tutorial(models.Model): 
    Name = CharField(max_length=64, unique=True,) 
    Courses = ManyToManyField(Course,) 
    Index = PosSmallInt() 

Есть много Course s и каждый Course имеет Tutorial с, но есть некоторые Course s, которые разделяют одни и те же Tutorial с.

Теперь у каждого Tutorial должен быть уникальный Index в Course, что он находится внутри.

Я думаю, я должен отметить, что Courses (ManyToManyField) был регулярным Course (ForeignKey) не так давно, а это значит, у меня было дублировать Tutorial с, и я имел эту линию в Meta классе Tutorial:

unique_together = (('Course', 'Index')) 

сохранить Course от другого Tutorial s в том же Index.

Но теперь, когда это ManyToManyField, это невозможно.

Пример:

У меня следующие Course лет с их Tutorial с:

  • C#
    1. Синтаксис
    2. Условие
    3. Петли
  • Python:
    1. Условия
    2. Loops
    3. Лямбда

(Ради примера, пожалуйста, рассмотреть "условия" и "петли", чтобы иметь точно такую ​​же информацию.)

Как я могу получить такие же Tutorial s в разных Course s с различными Index es?

ответ

2

Попробуйте с through атрибута:

class Tutorial(models.Model): 
    Name = CharField(max_length=64, unique=True,) 
    Courses = ManyToManyField(Course, through='TutorialCourse') 

class TutorialCourse(models.Model): 
    tutorial = models.ForeignKey(Tutorial, on_delete=models.CASCADE) 
    course = models.ForeignKey(Course, on_delete=models.CASCADE) 
    Index = PosSmallInt() 

    class Meta: 
     unique_together = (('tutorial', 'course', 'Index')) 
+0

Нужно ли использовать другую модель? – AnDrOiD

+1

Извините, я не видел вашего ответа. И да, для вашего случая вам нужно создать новую модель, потому что у вас есть дополнительная логика между моделями. –