Anton
ага и лично собранную генту вместо убунты)
Anonymous
Не, убунта норм
darkwoolf
конечно, норм)
Anonymous
Нет
поч?
Mark ☢️
Спс!
У тебя какой-то лгбт-аватар
Наверное, ты прав
А в чем проблема с лгбт-аватарами?
Mark ☢️
Сжечь геев
Наверное, ты прав
Целостность чужих анусов заботит?))
Mark ☢️
Mark ☢️
Mark ☢️
Mark ☢️
Наверное, ты прав
Mark ☢️
Anonymous
наш мир чей -то больной вымысел)
Elinka22
У тебя какой-то лгбт-аватар
А мне насрать на твоё мнение
Diʍᴀ
Хуя вы тут бушуете
Diʍᴀ
Черти
Diʍᴀ
Дети ебанутые
ikasymov
Ребят кто работал с rest api есть вопрос.
ikasymov
?
Pavel
все работали, я подозреваю.
ikasymov
я новичок в этом , могу ли я вам в лс задать вопрос?
Mark ☢️
Пейшы в чят
ikasymov
есть у меня def get_serializer и в нем я вызываю serializer который должен обновлят данные, но при отправки запроса PUT он пишет такую ошибку Cannot call .is_valid() as no data= keyword argument was passed when instantiating the serializer instance.
Mark ☢️
А можно в виде кода ?
Pavel
я так понимаю, это django-rest-framework?
ikasymov
вот код class ProducerRetrieveUpdateView(generics.RetrieveUpdateAPIView): permission_classes = [ProducerOwnerOrReadOnly] def get_serializer(self, *args, **kwargs): return ProducerUpdateSerializer
ikasymov
у меня там еще есть код внутри функции get_serializer но я его убрал что бы не мешало, проблема только в этом куске кода
ikasymov
да rest api
ikasymov
может надо data=передать экземпляр?
Pavel
это весь код вьюхи?
ikasymov
class ProducerRetrieveUpdateView(generics.RetrieveUpdateAPIView): permission_classes = [ProducerOwnerOrReadOnly] def get_serializer(self, *args, **kwargs): queryset = Producer.objects.get(pk=self.kwargs['pk']) if self.request.user.is_authenticated: return ProducerSerializer(queryset, fields=('short_info',)) if self.request.method == 'PUT' or self.request.method == 'PATCH': return ProducerUpdateSerializer else: return ProducerSerializer(queryset, fields=('website', 'phone', 'email', 'contacts', 'short_info')) def get_queryset(self): return Producer.objects.filter(pk=self.kwargs['pk'])
ikasymov
это вьюха
ikasymov
вот серилизатор class ProducerUpdateSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField() categories = serializers.StringRelatedField(many=True) class Meta: model = Producer fields = ('id', 'business_type', 'logo', 'name', 'slug', 'country', 'city', 'street_address', 'zip', 'short_info', 'info', 'website', 'categories', 'tags')
ikasymov
при запросе PUT ошибка выходит: Cannot call .is_valid() as no data= keyword argument was passed when instantiating the serializer instance.
ikasymov
подскажете в чем проблема?
Pavel
хм
Pavel
у Вас какая-то древняя версия django-rest-framework, похоже по предполагаю что неприавльно с get_serializer работаете
Pavel
там в одном случае возвращается тупо класс serializer'a, в случае с 'PUT" or 'PATH'
Pavel
а в других -- уже его инстанс
Pavel
сравните
Pavel
return ProducerSerializer(queryset, fields=('short_info',)) и return ProducerUpdateSerializer
ikasymov
и как же быть?
ikasymov
не знаю что передать ProducerUpdateSerializer что бы сработал, пробовал передать обьект и т.д не получается та же ошибка
Pavel
я подозреваю что get_serialiser должен вернуть просто класс сериалайзера
Pavel
не надо туда ничего там передавать
Pavel
если хотите какую-то логику дальше накрутить, это делается в update или perform_update
Pavel
не помню уже
ikasymov
мне же надо вытаскивать только определенные поля с запрашиваемого обьекта, такое я смог сделать только в get_serializer, и внутри мне надо еще и обновление сделать, и это у меня не получается, по другому никак надо сделать все это именно в get_serializer
Pavel
ну там у тебя 3 if
Pavel
каждый из них должен возвращать просто serializer
Pavel
если нужны специальные поля -- делай отдельные serializer'ы :)
ikasymov
а как же DynamicFieldsModelSerializer? Зачем он нужен тогда?
ikasymov
если для каждого отдельный serializer то будет тупо дублирование кода из за несколько полей
Pavel
я не вижу у тебя в коде DynamicFieldsModelSerializer
ikasymov
class DynamicFieldsModelSerializer(serializers.ModelSerializer): def __init__(self, *args, **kwargs): # Don't pass the 'fields' arg up to the superclass fields = kwargs.pop('fields', None) # Instantiate the superclass normally super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs) if fields is not None: for i in fields: print self.fields.pop(i) class ProducerSerializer(DynamicFieldsModelSerializer): tags = TagListSerializerField() categories = serializers.StringRelatedField(many=True) contacts = ProducerContactSerializer(many=True) country = CountryField(country_dict=True) business_type = ChoicesSerializerField() class Meta: model = Producer fields = ('id', 'business_type', 'logo', 'name', 'slug', 'country', 'city', 'street_address', 'zip', 'short_info', 'info', 'website', 'categories', 'tags', 'contacts', 'email', 'phone') class ProducerUpdateSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField() categories = serializers.StringRelatedField(many=True) class Meta: model = Producer fields = ('id', 'business_type', 'logo', 'name', 'slug', 'country', 'city', 'street_address', 'zip', 'short_info', 'info', 'website', 'categories', 'tags')
ikasymov
вот мой сирилизатор, тепер поняли чего я хочу? :)
ikasymov
все if работают нормально кроме той где при PUT вызывается другой serializer и вопрос был в том как решить ее?я просто ошибку не понял
Pavel
эээ return ProducerUpdateSerializer(queryset) ?
ikasymov
не понял ваш вопрос
Pavel
def get_serializer(self, *args, **kwargs): queryset = Producer.objects.get(pk=self.kwargs['pk']) if self.request.user.is_authenticated: return ProducerSerializer(queryset, fields=('short_info',)) if self.request.method == 'PUT' or self.request.method == 'PATCH': return ProducerUpdateSerializer else: return ProducerSerializer(queryset, fields=('website', 'phone', 'email', 'contacts', 'short_info'))
Pavel
было так
ikasymov
да
Pavel
def get_serializer(self, *args, **kwargs): queryset = Producer.objects.get(pk=self.kwargs['pk']) if self.request.user.is_authenticated: return ProducerSerializer(queryset, fields=('short_info',)) if self.request.method == 'PUT' or self.request.method == 'PATCH': return ProducerUpdateSerializer(queryset) else: return ProducerSerializer(queryset, fields=('website', 'phone', 'email', 'contacts', 'short_info'))
Pavel
стало так
ikasymov
я просто пробовал решить проблему,
ikasymov
задать ему обьект вдруг сработает :)
ikasymov
по теории должно было работать, если юзер авторизован то возвращаем серилизатор с аргументами, если запрос PUT то без аргумента и другой serializer, но почему то не пашет
ikasymov
в интернете про метод get_serializer мало информации
Pavel
а почему такая древняя версия django-rest-framework используется? :)
Pavel
мы ведь о django-rest-framework.org говорим?
ikasymov
да об этом
ikasymov
и как тут сделать то что я хочу?