Следующее предназначено для приложения для творческого письма. Все аспекты (персонажи, сцены, проекты и т. Д. c.) Записаны в одной и той же модели, что позволяет создать простой каталог на боковой панели. У каждого есть модели расширения для добавления определенных c полей, поэтому, когда элемент выбран на боковой панели, модель расширения загружается в виде формы справа. Дополнительные поля модели расширения и модель юниверса исключены для ясности.
Проблема в том, что я действительно застрял с ограничением выбора в конкретном поле c ManytoMany.
MODELS.PY
class user_information
user = models.ForeignKey(User, on_delete=models.CASCADE)
current_universe = models.PositiveSmallIntegerField(blank=True, null=True)
class element_type
name <e.g. ID 1 = universe, ID 2 = project, ID 3 = scene, ID 4 = draft, ID 5 = characters>
class element
name = models.CharField(max_length=100)
elements_type = models.ForeignKey(element_type, on_delete=models.CASCADE)
universe = models.PositiveSmallIntegerField() <default value will be set automatically to match current_universe>
parent_ID models.ForeignKey('self', on_delete=models.CASCADE) <if the element is a scene, this will identify its draft; likewise with a draft and its project>
class extension_project
name = models.CharField(max_length=100)
element_id = models.ForeignKey(element, on_delete=models.CASCADE)
characters = models.ManyToManyField(element, limit_choices_to={'elements_type': 1, 'universe': ? User_information’s current_universe – record 1}) <don't know how to do this at the moment but that's not part of the question>
class extension_draft
name = models.CharField(max_length=100)
element_id = models.ForeignKey(element, on_delete=models.CASCADE)
class extension_scenes
name = models.CharField(max_length=100)
characters = models.ManyToManyField(element, limit_choices_to={'element_type': 1, < ? elements with the same project as this scene’s 1) element’s 2) parent ID’s 3) parent ID > })
Мне нужен список выбора символов в этой модели extension_scenes, чтобы показывать мне только символы, связанные с существующим проектом (соединение, выполненное через модель extension_project с столбец символов). Как узнать, какой проект? Путем сопоставления проекта текущей выбранной записи extension_scene со столбцом element_id модели extension_project. Какому проекту принадлежит extension_scene, можно найти в элементной модели.
Итак, приложение должно - сначала идентифицировать проект этой записи extension_scene:
- найдите в модели элементов ID , который соответствует elements_ID ;
- для этого найденного элемента найдите элемент, чей ID совпадает с его parent_ID (таким образом, перейдя к элементу, который имеет черновой тип в качестве типа)
- для этого (чернового) элемента, найдите элемент чей ID соответствует его parent_ID (таким образом, перейдя к записи элемента проекта этого чернового элемента)
- обратите внимание на этот элемент (проект) ID - назовем это X . .
Затем ограничьте этот список символов:
- только элементы списка (с типом 1, т.е. символы);
- поиск в записи extension_projects , и найдите elements_ID = до X
Спасибо за любую помощь