Я пытаюсь получить только некоторые полей в «Встречи», связанных с арендуемой собственностью «Юнит». Из UnitSerializer я вызываю SerializerMethodField () для обратного поиска поля «назначение». Это хорошо работает. Однако набор запросов возвращает все поля (идентификатор, время, единица измерения, персонал, проспект) в каждом объекте, когда мне нужно только несколько (идентификатор, время).
Я пытался .values () в наборе запросов например так:
queryset = instance.appointment_set.values('id', 'appointment_time')
Но я получаю "Получил KeyError при попытке получить значение для полевого модуля на сериализаторе AppointmentSerializer. \ nПоле сериализатора может быть названо неправильно и не соответствовать ни одному атрибуту или ключу на экземпляр dict. \ nПервоначальный текст исключения был: unit. "
Обратите внимание, если вам нужен весь код, но вот главное.
Модели
class Appointment(models.Model):
appointment_time = models.DateTimeField()
unit = models.ForeignKey(Unit, on_delete=models.CASCADE)
staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
prospect = models.ForeignKey(Prospect, on_delete=models.CASCADE)
Сериализаторы
class AppointmentSerializer(serializers.ModelSerializer):
class Meta:
model = Appointment
fields = ['id','appointment_time']
class UnitSerializer(serializers.ModelSerializer):
appointment = SerializerMethodField()
class Meta:
model = Unit
fields = ['id', 'address', 'appointment']
def get_appointment(self, instance):
cutoff = _datetime.date.today() + timedelta(hours=72)
queryset = instance.appointment_set.exclude(appointment_time__gt=cutoff)
return AppointmentSerializer(queryset, many=True).data