2016-11-13 2 views
0

при запросе PUT (обновление) из этой ошибкиКак обновить с методом PUT Джанго-покоя рамках

Можно не называть .is_valid(), как не было принято никаких данных = ключевое слово аргумент при создании экземпляра экземпляра сериализатора. мой взгляд:

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 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(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 (обновление) из этой ошибки

Не могу назвать .is_valid(), как не был принят никаких данных = ключевое слово аргумент при инстанцировании экземпляр сериализатора.

ответ

0

Во-первых, я сомневаюсь, что ваш get_serializer подходит для PUT. Он должен возвращать экземпляр, пока вы возвращаете класс.

Что касается вашей проблемы, сообщение об ошибке довольно ясно. Вы не передаете data=request.data вашему сериализатору при его создании. Документация содержит an example о том, как это сделать.

Смежные вопросы