#django #serialization #django-rest-framework
#django #сериализация #django-rest-framework
Вопрос:
Я написал класс CustomSlugRelatedField давным-давно. Я не могу вспомнить и выяснить, какую цель это решало ранее, поскольку и SlugRelatedField, и мое CustomSlugRelatedField имеют одинаковую функциональность
class CustomSlugRelatedField(serializers.SlugRelatedField):
def __init__(self, *args, **kwargs):
# Instantiate the superclass normally
query_field = kwargs.pop('query_field', None)
super(CustomSlugRelatedField, self).__init__(*args, **kwargs)
if query_field:
self.query_field = query_field
else:
self.query_field = self.slug_field
def to_internal_value(self, data):
try:
return self.get_queryset().get(**{self.query_field: data})
except ObjectDoesNotExist:
self.fail('does_not_exist', query_field=self.query_field, value=smart_text(data))
except (TypeError, ValueError):
self.fail('invalid')
Ответ №1:
Сравнивая этот код с исходным кодом, я думаю, что здесь вы передаете дополнительное имя поля query_field
вместе с slug_field
, которое может быть использовано для получения объекта из набора запросов. Использование может быть таким:
class YourSerializer(serializers.ModelSeirlaizer):
some_field = CustomSlugRelatedField(query_field='some_field', slug_field="something_else")
Хотя это кажется излишним, потому что вам уже нужно slug_field
сделать то же самое для вас.
Комментарии:
1. Спасибо, возможно, это помогло бы, если бы вы хотели показать другое поле, но запрашивать на основе другого поля