Не удается понять поля, связанные с сериализатором (CustomSlugRelatedField)

#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. Спасибо, возможно, это помогло бы, если бы вы хотели показать другое поле, но запрашивать на основе другого поля