Django annotate by first object from m2o or m2m field

29 Views Asked by At

I have 3 models:

class Ban:
 name: models.CharField()
 person: models.ForeignKey(to="apps.Person")

class Employee:
 name: models.Charfield()
 person: models.ForeignKey(to="apps.Person")

class Person:
 name: models.Charfield()
 # here a have access to Ban and Employee as self.ban_set, self.employee_set

I can get all Employee objects from Ban object as: ban_object.person.employee_set

I need annotate Ban queryset by Employee first object from Ban "person.employee_set" field.

I try do this by:

employees = Employee.objects.filter(person_id=OuterRef("person_id"))
qs = Ban.objects.annotate(
    employee=Subquery(employees[:1])
)

But I get error: "Cannot resolve expression type, unknown output_field" If I set output_field as models.ForeignKey() for Subquery or annotate, nothing working too

UPDATE I can get id of first Empoyee by:

employees = Employee.objects.filter(person_id=OuterRef("person_id")).values("id")
qs = Ban.objects.annotate(
    employee=Subquery(employees[:1])
)

So, I think annotate by object value is impossible? Only by id value?

0

There are 0 best solutions below