@@ -532,7 +532,7 @@ class Meta:
532
532
@extend_schema_field (serializers .ListField (child = EntryAttributeTypeSerializer ()))
533
533
def get_attrs (self , obj : Entry ) -> list [EntryAttributeType ]:
534
534
def get_attr_value (attr : Attribute ) -> EntryAttributeValue :
535
- attrv = attr .get_latest_value ( is_readonly = True )
535
+ attrv = attr .attrv_list [ 0 ] if len ( attr . attrv_list ) > 0 else None
536
536
537
537
if not attrv :
538
538
return {}
@@ -560,7 +560,7 @@ def get_attr_value(attr: Attribute) -> EntryAttributeValue:
560
560
"name" : x .referral .entry .schema .name ,
561
561
},
562
562
}
563
- for x in attrv .data_array .all ()
563
+ for x in attrv .data_array .all (). select_related ( "referral" )
564
564
if x .referral and x .referral .is_active
565
565
]
566
566
}
@@ -580,7 +580,7 @@ def get_attr_value(attr: Attribute) -> EntryAttributeValue:
580
580
if x .referral and x .referral .is_active
581
581
else None ,
582
582
}
583
- for x in attrv .data_array .all ()
583
+ for x in attrv .data_array .all (). select_related ( "referral" )
584
584
if not (x .referral and not x .referral .is_active )
585
585
]
586
586
return {"as_array_named_object" : array_named_object }
@@ -721,9 +721,16 @@ def get_default_attr_value(type: int) -> EntryAttributeValue:
721
721
case _:
722
722
raise IncorrectTypeError (f"unexpected type: { type } " )
723
723
724
+ attrv_prefetch = Prefetch (
725
+ "values" ,
726
+ queryset = AttributeValue .objects .filter (is_latest = True ).select_related (
727
+ "referral" , "group" , "role"
728
+ ),
729
+ to_attr = "attrv_list" ,
730
+ )
724
731
attr_prefetch = Prefetch (
725
732
"attribute_set" ,
726
- queryset = Attribute .objects .filter (parent_entry = obj ),
733
+ queryset = Attribute .objects .filter (parent_entry = obj ). prefetch_related ( attrv_prefetch ) ,
727
734
to_attr = "attr_list" ,
728
735
)
729
736
entity_attrs = (
0 commit comments