Anton
ага и лично собранную генту вместо убунты)
Pad
Anonymous
Не, убунта норм
darkwoolf
конечно, норм)
Alex
Anonymous
Elinka22
Anonymous
Elinka22
Mark ☢️
Спс!
У тебя какой-то лгбт-аватар
Наверное, ты прав
А в чем проблема с лгбт-аватарами?
Mark ☢️
Сжечь геев
Наверное, ты прав
Целостность чужих анусов заботит?))
Mark ☢️
Mark ☢️
Mark ☢️
Mark ☢️
Наверное, ты прав
Mark ☢️
Anonymous
наш мир чей -то больной вымысел)
Diʍᴀ
Хуя вы тут бушуете
Diʍᴀ
Черти
Diʍᴀ
Дети ебанутые
ikasymov
Ребят кто работал с rest api есть вопрос.
ikasymov
?
Pavel
все работали, я подозреваю.
ikasymov
я новичок в этом , могу ли я вам в лс задать вопрос?
Mark ☢️
Пейшы в чят
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
и как тут сделать то что я хочу?