akhil a
akhil a

Reputation: 11

How to remove fields from serializer

from .models import Catagory, CatagoryItems, MiniItems
from rest_framework import serializers

class MiniItemsSerializer(serializers.ModelSerializer):    


class Meta: 
    Mini = serializers.StringRelatedField(read_only=False,many=True)
  
    model = MiniItems
    fields ="__all__"
    read_only_fields = ("Mini","id") 
    depth=2

def validate_url(self, value):
    if value and len(value) > 0:
        raise serializers.ValidationError('Error')
    return value

def create(self, validated_data):
  if "catagory" in validated_data:
        del validated_data["catagory"]
  return Message.objects.create(**validated_data)


class CatagoryItemsSerializer(serializers.ModelSerializer):    


class Meta: 
    items = serializers.ListField(child=MiniItemsSerializer())
 
  
    model = CatagoryItems 
    fields ="__all__"
    read_only_fields = ("id","items")
# def validate_url(self, value):
#     if value and len(value) > 0:
#         raise serializers.ValidationError('Error')
#     return value

# def create(self, validated_data):
#      if "catagory" in validated_data:
#         del validated_data["catagory"]
#      return Message.objects.create(**validated_data)
    
    
  
class  CatagorySerializer(serializers.ModelSerializer):  


class Meta:        
    ser = serializers.SerializerMethodField('removt')
    catagoryItems =serializers.SlugRelatedField(
    many=True,
    read_only=True,
    slug_field='name'
 )
 
    id = serializers.Field()
    model =  Catagory      
    fields =("id","name","desc","status","catagoryItems",)
    read_only_fields = ("catagoryItems",)    
    depth=1

def removet(self, *args, **kwargs):
      super(CatagorySerializer, self).__init__(*args, **kwargs)

      if 'catagory' in kwargs:
          if 'request' in kwargs['catagory']:
             tabs = kwargs['catagory']['request'].query_params.getlist('catagory', [])
             if tabs:
            # tabs = tabs.split(',')
            # included = set(tabs)
                existing = set(self.fields.keys())

                for other in existing - included:
                     self.fields.pop(other)

Upvotes: 1

Views: 2232

Answers (1)

Headmaster
Headmaster

Reputation: 2332

You should use exclude, here are the docs

Upvotes: 1

Related Questions