覆盖 Django 序列化程序中的字段

Overwrite fields in Django Serializer

我是 Django 的新手,我想覆盖序列化程序的 createupdate 方法中的字段值。这是我的模型=>

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)

这是我的序列化器=>

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)

我想更新 create 方法中的 Create_usr 字段值和 update 方法中的 LastModified_usr 字段值。但为什么我不能将 create_usr 字段覆盖为 "Testing"?

这是我的观点=>

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)})

您的创建方法未在您的序列化程序 class 中定义,而是您的 Meta class 的一部分。您应该能够通过将创建方法移至 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'
        ]