Django many to many не симметричная реализация родителя. Обратный поиск возвращает дочерние элементы, а не родителей
В models.py у меня есть такая модель:
class element (models.Model):
element=models.Autofield(primary_key=true)
parent_element=models.ManyToMayField('self',null=True,blank=True, related_name='parents',symmetrical=False)
Эти отношения реализованы в базе данных, с помощью django, в таблице с полями "from_element" (дочерний элемент, мой элемент) и "to_element" (родители моего элемента). Проблемы возникают, когда я пытаюсь получить родителей элемента с помощью обратного поиска, давая в результате элементы, у которых мой элемент является родителем, дочерними.
Отлаживая родителей, я вижу следующее:
element.parents.source_field_name='to_element'
element.parents.target_field_name='from_element'
вместо
element.parents.source_field_name='from_element'
element.parents.target_field_name='to_element'
Приведу пример, если я создам элемент 1, а после создам элемент 2 с элементом 1 в качестве "родителя", вот что у меня получится:
element.objects.get(element=1).parents.all()
2 (его ребенок, неправ)
element.objects.get(parent=1)
2 (его ребенок, rigth)
element.objects.get(element=2).parents.all()
не существует (неверно)
element.objects.get(parent=2)
не существует (верно)
В базе данных у меня так: from_element - 2, to_element - 1. Но, как я уже сказал, parents.all() ищет от "to_element" к "from_element"
Многие к одному и один ко многим - это не одно и то же, у них есть направление. Легко определить один ко многим, когда вы используете различные модели, определите внешний ключ в модели "многие" и все готово, но не в случае "себя". В поисках информации я всегда находил "используйте внешний ключ" или "используйте много-ко-многим не симметрично". Но, в моем случае, элемент может иметь несколько родителей, родители могут иметь несколько детей (поэтому я не могу использовать ForeignKey) и родитель не является ребенком своих детей (симметрично).
Итак, вопрос: как я могу определить это направление или взаимосвязь? Или, по крайней мере, как я могу сделать обратный поиск в нужном направлении? (от_элемента к_элементу)
Заранее большое спасибо и пожелания.