Как установить прокси-модель для набора запросов по внешнему ключу в Django?

У меня есть две модели Parent и Child:

class Parent(models.Model):
    some_field = models.IntegerField()


class Child(models.Model):
    objects = models.Manager()
    custom_objects = managers.CustomManager()
    parent = models.ForeignKey(Parent)
    

И одна прокси-модель для Child:

class ProxyChild(Child):
    class Meta:
        proxy = True

Если я хочу получить дочерние элементы родителя, используя пользовательский менеджер, я могу сделать следующее:

children = parent.child_set(manager='custom_objects').all()

Как я могу получить детей родителя, используя ProxyChild, я думал об этом, но ничего не получается:

children = parent.child_set(model=ProxyChild).all()

Мне нужно получить набор именно через parent.child_set, потому что мне нужен доступ к родительским полям через дочерние без дополнительных запросов к базе данных.

Использование ProxyChild.objects.filter(parent=parent).select_related('parent') имеет два минуса:

  1. It is heavier.
  2. If i want to use a proxy model for parent and then filter the children then Django set the original class of parent(not proxy), for example:
class ProxyParent(Parent):
    class Meta:
        proxy = True

parent = ProxyParent.objects.all().first()
child = ProxyChild.objects.filter(parent=parent).select_related('parent').first()
print(child.parent)

child.parent будет экземпляром класса Parent, а не ProxyParent

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