1. 程式人生 > 實用技巧 >Django序列化

Django序列化

這是我的model裡面的表

1 class User(models.Model):
2     username = models.CharField(max_length=32,verbose_name='使用者名稱')
3     age = models.IntegerField(verbose_name='年齡',null=True)
4     home = models.CharField(max_length=32,verbose_name='家鄉')
5 
6     class Meta:
7         db_table = 'user'

普通序列化

from rest_framework import serializers   #倒入rest_framework裡面的serializers


class UserSer(serializers.Serializer):
    username = serializers.CharField(max_length=32)   #把每個欄位添入其中
    age = serializers.IntegerField(allow_null=True)  #年齡可以為null
    home = serializers.CharField(max_length=32)

######################################################################
查到的資料
{ "username":"孔加貝月月", "age":19, "home":"河南" }, { "username":"尼大爺", "age":20, "home":"河北" }, { "username":"尼大娘", "age":21, "home":"湖北" }, { "username":"尼你妹", "age":20, "home":"湖南" }, { "username":"孔大爺", "age":100, "home":"你心裡" }

新增資料的序列化

from rest_framework import serializers

from app01.models import User
#還是剛剛那個序列化只不過是添加了一些程式碼
class UserSer(serializers.Serializer):
    username = serializers.CharField(max_length=32)
    age = serializers.IntegerField(allow_null=True)
    home = serializers.CharField(max_length=32)
    
    #序列化新增資料
    def create(self,validated_data):
        return User.objects.create(**validated_data)

##相對應views裡面的程式碼
def post(self,request):
data = request.data
user = UserSer(data=data)
try:
user.is_valid()
user.save()
return Response('成功')
except Exception:
print('序列化加入未成功')
return Response('失敗')

修改的序列化

class UserSer(serializers.Serializer):
    username = serializers.CharField(max_length=32)
    age = serializers.IntegerField(allow_null=True)
    home = serializers.CharField(max_length=32)

    #序列化新增資料
    def create(self,validated_data):
        return User.objects.create(**validated_data)

   #這裡開始是修改的序列化
    def update(self, instance, validated_data):
        instance.username = validated_data.get('username',instance.username)   #把他的每個欄位都寫入其中進行修改
        instance.age = validated_data.get('age',instance.age)
        instance.home = validated_data.get('home',instance.home)

        instance.save()    #提交 修改
        return instance

#修改相對應的views裡的程式碼
def put(self,request):
    data = request.data

user = User.objects.filter(id=data.get('id')).first()
update_user = UserSer(user,data=data)

try:
update_user.is_valid()
update_user.save()
return Response('成功')
except Exception as e:
print(e)
return Response('失敗')