我有两种型号:
class Training(models.Model):
"""Training records Model."""
class PersonTraining(models.Model):
"""Saves the trainings, the employee has completed or is enrolled in."""
employee = models.ForeignKey(Person, related_name='records', on_delete=models.CASCADE)
training = models.ForeignKey(Training, related_name='person_training', on_delete=models.CASCADE)
在PersonTrainingView(viewsets.ModelViewSet(的get_queryset方法中,我用"average_rating">和‘is_top_rated’字段注释了Training模型的对象
然后我在PersonTraining查询集中预取了训练模型:
person_training_queryset = person_training_queryset.prefetch_related(
Prefetch('training', queryset=annotated_trainings)
)
问题是,我需要根据预取的Training模型的注释字段将PersonTrainingqueryset排序为:
person_training_queryset = person_training_queryset.order_by('-training__is_top_rated', '-training__average_rating')
但在get_queryset方法中执行期间无法访问它,并抛出
django.core.exceptions.FieldError: Cannot resolve keyword
请提出解决方案。
注意:我没有用‘average_rating’和"s_top_rated">字段注释PersonTraining查询集,因为我需要在PersonTraining查询集中应用不同的字段它将通过
'Error: annotate() + distinct(fields) is not implemented.'
+1面临同样的问题。我将在Prefetch类中使用的查询集本身与带注释的字段一起正常工作,但在预取它的最终查询集中则不然。因此,嵌套对象没有注释所需的属性。