Реализация возможностей "The Browsable API" из Django REST Framework в приложении react
У меня есть несколько моделей со структурой, подобной этой:
class YearInSchool(Enum):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
GRADUATE = 'GR'
@classmethod
def choices():
return (tuple(i.name, i.value) for i in YearInSchool)
class Student(models.Model):
year_in_school = models.CharField(
max_length=2,
choices=YearInSchool.choices(),
)
class MyModel(models.Model):
# Some other fields here
year = models.ForeignKey(Student, blank=True, null=True, on_delete=models.SET_NULL)
Представление, которое я использую, выглядит примерно так:
class GetStudentDetails(generics.RetrieveUpdateDestroyAPIView):
class StudentSerializer(serializers.Modelserializer):
class Meta:
model = Student
fields = '__all__'
queryset = Student.objects.all()
serializer_class = StudentSerializer
lookup_field = 'year_in_school'
Если бы я сделал вызов API, результат выглядел бы примерно так:
{
// Some other fields here
"year_in_school": 1,
}
Если бы я хотел, чтобы опции также возвращались из вызова API, мне пришлось бы добавить дополнительное поле, подобное тому, что описано в этом посте: https://stackoverflow.com/a/54409752/15459291
Если бы я хотел получить значение текущего выбранного варианта вместо первичного ключа, мне также пришлось бы сгладить структуру, добавив еще одно новое поле.
"The Browsable API" из Django REST Framework показывает всю эту информацию и реализует выпадающие селекторы для полей выбора, в которых предварительно выбирается текущее значение.
Мне кажется, что это самый разумный способ представить эту информацию и сделать ее доступной для пользователя. Кто-то где-то уже проделал всю работу.
Есть ли способ получить всю необходимую информацию для реализации этой функциональности из одного вызова API без необходимости добавлять все эти поля в мои сериализаторы для потенциально сотен полей в нескольких моделях?
Любая помощь будет мне очень признательна.