
Rocket
11.11.2016
19:37:53

Louis
11.11.2016
19:38:11
и еще pycharm)

ustas
11.11.2016
19:45:40
ага и лично собранную генту вместо убунты)

Rocket
11.11.2016
19:45:53

Google

Louis
11.11.2016
20:18:23
Не, убунта норм

darkwoolf
11.11.2016
20:22:02
конечно, норм)

Alex
11.11.2016
20:58:07

Louis
11.11.2016
20:58:39

Павел
12.11.2016
05:19:40

Konstantin
12.11.2016
06:52:12

Павел
13.11.2016
07:17:37

Марк ☢
13.11.2016
11:38:05
Спс!
У тебя какой-то лгбт-аватар

Aleksey
13.11.2016
11:39:03
А в чем проблема с лгбт-аватарами?

Марк ☢
13.11.2016
11:42:43
Сжечь геев

Aleksey
13.11.2016
11:46:45
Целостность чужих анусов заботит?))

Михаил
13.11.2016
11:53:02
наш мир чей -то больной вымысел)

Павел
13.11.2016
11:54:17

Google

Dmitry
13.11.2016
11:54:35
Хуя вы тут бушуете
Черти
Дети ебанутые

Ilgiz
13.11.2016
12:05:55
Ребят кто работал с rest api есть вопрос.
?

Pavel
13.11.2016
12:06:22
все работали, я подозреваю.

Ilgiz
13.11.2016
12:06:47
я новичок в этом , могу ли я вам в лс задать вопрос?

Марк ☢
13.11.2016
12:06:55
Пейшы в чят

Ilgiz
13.11.2016
12:08:48
есть у меня def get_serializer
и в нем я вызываю serializer который должен обновлят данные, но при отправки запроса PUT он пишет такую ошибку
Cannot call .is_valid() as no data= keyword argument was passed when instantiating the serializer instance.

Марк ☢
13.11.2016
12:09:14
А можно в виде кода ?

Pavel
13.11.2016
12:09:36
я так понимаю, это django-rest-framework?

Ilgiz
13.11.2016
12:10:12
вот код
class ProducerRetrieveUpdateView(generics.RetrieveUpdateAPIView):
permission_classes = [ProducerOwnerOrReadOnly]
def get_serializer(self, *args, **kwargs):
return ProducerUpdateSerializer
у меня там еще есть код внутри функции get_serializer но я его убрал что бы не мешало, проблема только в этом куске кода
да rest api
может надо data=передать экземпляр?

Pavel
13.11.2016
12:22:22
это весь код вьюхи?


Ilgiz
13.11.2016
12:24:18
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'])
это вьюха
вот серилизатор
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')
при запросе PUT ошибка выходит:
Cannot call .is_valid() as no data= keyword argument was passed when instantiating the serializer instance.

Google

Ilgiz
13.11.2016
12:33:38
подскажете в чем проблема?

Pavel
13.11.2016
12:44:04
хм
у Вас какая-то древняя версия django-rest-framework, похоже
по предполагаю что неприавльно с get_serializer работаете
там в одном случае возвращается тупо класс serializer'a, в случае с 'PUT" or 'PATH'
а в других -- уже его инстанс
сравните
return ProducerSerializer(queryset, fields=('short_info',))
и
return ProducerUpdateSerializer

Ilgiz
13.11.2016
12:47:52
и как же быть?
не знаю что передать ProducerUpdateSerializer что бы сработал, пробовал передать обьект и т.д не получается та же ошибка

Pavel
13.11.2016
13:02:27
я подозреваю что get_serialiser должен вернуть просто класс сериалайзера
не надо туда ничего там передавать
если хотите какую-то логику дальше накрутить, это делается в update или perform_update
не помню уже

Ilgiz
13.11.2016
13:15:27
мне же надо вытаскивать только определенные поля с запрашиваемого обьекта, такое я смог сделать только в get_serializer, и внутри мне надо еще и обновление сделать, и это у меня не получается, по другому никак надо сделать все это именно в get_serializer

Pavel
13.11.2016
13:20:10
ну там у тебя 3 if
каждый из них должен возвращать просто serializer
если нужны специальные поля -- делай отдельные serializer'ы :)

Ilgiz
13.11.2016
13:23:13
а как же DynamicFieldsModelSerializer? Зачем он нужен тогда?
если для каждого отдельный serializer то будет тупо дублирование кода из за несколько полей

Pavel
13.11.2016
13:24:27
я не вижу у тебя в коде DynamicFieldsModelSerializer

Google


Ilgiz
13.11.2016
13:24:54
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')
вот мой сирилизатор, тепер поняли чего я хочу? :)
все if работают нормально кроме той где при PUT вызывается другой serializer и вопрос был в том как решить ее?я просто ошибку не понял


Pavel
13.11.2016
13:27:18
эээ return ProducerUpdateSerializer(queryset) ?

Ilgiz
13.11.2016
13:28:33
не понял ваш вопрос

Pavel
13.11.2016
13:29:01
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'))
было так

Ilgiz
13.11.2016
13:29:16
да

Pavel
13.11.2016
13:29:22
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'))
стало так

Ilgiz
13.11.2016
13:30:02
я просто пробовал решить проблему,
задать ему обьект вдруг сработает :)
по теории должно было работать, если юзер авторизован то возвращаем серилизатор с аргументами, если запрос PUT то без аргумента и другой serializer, но почему то не пашет
в интернете про метод get_serializer мало информации

Pavel
13.11.2016
13:42:52
а почему такая древняя версия django-rest-framework используется? :)
мы ведь о django-rest-framework.org говорим?

Ilgiz
13.11.2016
13:51:06
да об этом
и как тут сделать то что я хочу?
там говриться про это:
get_serializer(self, instance=None, data=None, many=False, partial=False) - Returns a serializer instance.

Google

Ilgiz
13.11.2016
13:52:27
по этому я и использую его

Pavel
13.11.2016
13:55:14
а блин.
я кажется понял
return ProducerUpdateSerializer(queryset, data=request.data)
как-то так может сработает? :)

Ilgiz
13.11.2016
13:56:05
я уже пробовал :)

Pavel
13.11.2016
14:06:57
фигово
а что он пишет на этом?

Ilgiz
13.11.2016
14:10:49
тоже самая ошибка
Cannot call .is_valid() as no data= keyword argument was passed when instantiating the serializer instance.