Как установить прокси-модель для набора запросов по внешнему ключу в 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')
имеет два минуса:
- It is heavier.
- 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