Это мой (упрощенный) вариант использования:
from django.db import models
class MyType(models.Model):
whatever = models.CharField()
class A(models.Model):
type = models.ForeignKey(MyType)
class B(models.Model):
my_type = models.ForeignKey(MyType)
position = models.IntegerField(default=0)
Я хочу, чтобы элементы из A сортировались по полю позиции B .Итак, мне нужно сначала объединить таблицы A и B на MyType
.Попробовал это:
A.objects.all().annotate(position=B.objects.get(my_type=models.F('type')).position).order_by('position')
Получил ошибку:
FieldError: Cannot resolve keyword 'type' into field. Choices are: my_type, my_type_id, position
Итак, Джанго понимает, что F('type')
пытается получить значение поля 'type' модели B. Что,конечно, не существует. Я хотел использовать поле 'type' модели A . Похоже, что F относится к внутреннему запросу, а не к внешнему.
Итак, есть ли лучший способ получить то, что я хочу?