rest_framework中的ModelSerializer

本文介绍了Django rest_framework中的ModelSerializer,它为开发者提供了更高级别的抽象,简化了创建和更新操作,无需手动覆盖create和update方法。讨论了如何使用exclude属性排除字段,如何添加额外字段,以及如何将字段设置为只读。同时也提醒虽然可以继承父类的Meta,但并不推荐这样做。
摘要由CSDN通过智能技术生成

1、ModelSerializer 比Serializer封装好了一层,直接自己生成的create和update,不用覆盖了,其实推荐用这个,毕竟Serializer封装的很低级,既然用django,就要用好点的。

正常的应该是这样的

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ('id', 'account_name', 'users', 'created')
class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = '__all__'

官网推荐用第一种,因为第二种,改变model时,可能无意会泄露数据

2、还有个省事的,exclude是除了某个字段,其他的都显示

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        exclude = ('users',)
3、当一个model有外键的时候,默认显示的是外键的id,此时要显示外键的所有值可以用下面,depth,会把外键的所有值显示出来

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ('id', 'account_name', 'users', 'created')
        depth = 1
至于反向查找,请看我的另一个文章。

4、如果一个serializer中,要包含出了model以外的字段,可以

class AccountSerializer(serializers.ModelSerializer):
    url = serializers.CharField(source='get_absolute_url', read_only=True)
    groups = serializers.PrimaryKeyRelatedField(many=True)

    class Meta:
        model = Account
但是我没理解这么会怎么存。。。  一会试试

5、把一个字段变成只读字段,需要如下操作,自增字段默认是只读的,不显式表示也是可以的

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ('id', 'account_name', 'users', 'created')
        read_only_fields = ('account_name',)
user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())


6、把某一个字段变为只读,然后存储,通过额外字段指定。
class CreateUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('email', 'username', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User(
            email=validated_data['email'],
            username=validated_data['username']
        )
        user.set_password(validated_data['password'])
        user.save()
        return user
7、关于外键的嵌套,嵌套类型的关系可以看http://www.django-rest-framework.org/api-guide/relations/   还没研究这个

8、可以使用父类的Meta 但是强烈不推荐

class AccountSerializer(MyBaseSerializer):
    class Meta(MyBaseSerializer.Meta):
        model = Account
9、然后就自定义字段了,看起来没有什么卵用

就到这了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值