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) и родитель не является ребенком своих детей (симметрично).

Итак, вопрос: как я могу определить это направление или взаимосвязь? Или, по крайней мере, как я могу сделать обратный поиск в нужном направлении? (от_элемента к_элементу)

Заранее большое спасибо и пожелания.

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