lwin
lwin

Reputation: 4460

Overwrite fields in Django Serializer

I am new in Django and I would like to overwrite the field value in create and update method of serializer. Here is my model=>

class Holiday(models.Model):   
    HolidayDay = models.DateField()   
    Created_DT = models.DateTimeField()
    Created_Usr = models.CharField(max_length=20)
    LastModified_Usr = models.CharField(max_length=20,blank=True)
    LastModified_DT = models.DateTimeField(blank=True,null=True)

def __str__(self):
    return str(self.HolidayDay)

Here is my serializer=>

class HolidaySerializer(serializers.ModelSerializer):
    class Meta:        
        model=Holiday
        fields = [
            'id',
            'HolidayDay',           
            'Created_DT',
            'Created_Usr',
            'LastModified_Usr',
            'LastModified_DT'
        ]

        def create(self,validated_data):  
            validated_data['Created_Usr']  ="Testing"       
            return Holiday.objects.create(**validated_data)

I would like to update Create_usr field value in create method and LastModified_usr field in update method. But why I can't overwrite the create_usr field as "Testing"?

Here is my views=>

def post(self,request):
        holiday = request.data.get('holiday')      

        serializer = HolidaySerializer(data=holiday)

        serializer.is_valid()      
        print(serializer.errors)

        if serializer.is_valid():           
            holiday_saved=serializer.save()

        return Response({"success":"Holiday '{}' created successfully".format(holiday_saved.HolidayDay)})

    def put(self,request,pk):
        save_holiday = get_object_or_404(Holiday.objects.all(),pk=pk)
        data = request.data.get('holiday')
        serializer = HolidaySerializer(instance=save_holiday,data=data,partial=True)

        if serializer.is_valid(raise_exception = True):
            holiday_saved=serializer.save()

        return Response({"sucess": "Holiday '{}' updated successfully".format(holiday_saved.HolidayDay)})

Upvotes: 0

Views: 3931

Answers (1)

hendrikschneider
hendrikschneider

Reputation: 1846

Your create method is not defined in your Serializer class, instead it is part of your Meta class. You should be able to solve it by moving your create method to your HolidaySerializer:


class HolidaySerializer(serializers.ModelSerializer):
    def create(self,validated_data):  
        validated_data['Created_Usr']  = "Testing"       
        return Holiday.objects.create(**validated_data)

    class Meta:        
        model=Holiday
        fields = [
            'id',
            'HolidayDay',           
            'Created_DT',
            'Created_Usr',
            'LastModified_Usr',
            'LastModified_DT'
        ]

Upvotes: 1

Related Questions