Я пытаюсь исключить поле «проспект» из сериализатора Appointment, который вложен в Serializer модуля.
Как вы можете видеть ниже, из-за некоторых манипуляций с данными в наборе запросов Appointment я решил использовать SerializerMethodField для определения сериализатора Appointment. Однако я не уверен, как исключить поля при использовании SerializerMethodField.
В качестве альтернативы я мог бы использовать ModelSerializer для Встречи, которая позволяет мне определять, какие поля включать, но тогда я не смогу манипулировать данными так, как я хочу.
Обратите внимание, что делать.
Модели
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 UnitSerializer(serializers.ModelSerializer):
availability = SerializerMethodField()
manager = ManagerSerializer()
instruction = InstructionSerializer(source='instruction_set', many=True)
appointment = SerializerMethodField()
class Meta:
model = Unit
fields = ['id', 'address', 'manager', 'availability', 'instruction', 'appointment']
def get_availability(self, instance):
queryset = instance.availability_set.order_by('start_time')
return AvailabilitySerializer(queryset, many=True).data
def get_appointment(self, instance):
start_buffer = 0.5 ## How many hours from now do we start displaying appointments in the queue
end_buffer = 72 ## How many hours from now do we stop displaying appointments in the queue
start_cutoff = datetime.now() + timedelta(hours=start_buffer)
end_cutoff = datetime.now() + timedelta(hours=end_buffer)
queryset = instance.appointment_set.exclude(appointment_time__lt=start_cutoff).exclude(appointment_time__gt=end_cutoff).order_by('appointment_time')
return AppointmentSerializer(queryset, many=True).data
JSON Представление объекта
![AJAX Call](https://i.stack.imgur.com/XXSXA.png)