美文网首页
django modelserializer

django modelserializer

作者: 谢耳朵_X | 来源:发表于2018-05-03 10:06 被阅读167次

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

    正常的应该是这样的

    [python] 

    class AccountSerializer(serializers.ModelSerializer):  

    class Meta:  

            model = Account  

    fields = ('id', 'account_name', 'users', 'created')  

    [python] 

    class AccountSerializer(serializers.ModelSerializer):  

    class Meta:  

            model = Account  

    fields ='__all__'  

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

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

    [python]

    class AccountSerializer(serializers.ModelSerializer):  

    class Meta:  

            model = Account  

    exclude = ('users',)  

    3、当一个model有外键的时候,默认显示的是外键的id,此时要显示外键的所有值可以用下面,depth,会把外键的所有值显示出来

    [python] 

    class AccountSerializer(serializers.ModelSerializer):  

    class Meta:  

            model = Account  

    fields = ('id', 'account_name', 'users', 'created')  

    depth =1  

    至于反向查找,请看我的另一个文章。

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

    [python]

    class AccountSerializer(serializers.ModelSerializer):  

    url = serializers.CharField(source='get_absolute_url', read_only=True)  

    groups = serializers.PrimaryKeyRelatedField(many=True)  

    class Meta:  

            model = Account  

    但是我没理解这么会怎么存。。。  一会试试

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

    [python] 

    class AccountSerializer(serializers.ModelSerializer):  

    class Meta:  

            model = Account  

    fields = ('id', 'account_name', 'users', 'created')  

    read_only_fields = ('account_name',)  

    [python]

    user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())  

    6、把某一个字段变为只读,然后存储,通过额外字段指定。

    [python]

    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 但是强烈不推荐

    [python] 

    class AccountSerializer(MyBaseSerializer):  

    class Meta(MyBaseSerializer.Meta):  

            model = Account  

    相关文章

      网友评论

          本文标题:django modelserializer

          本文链接:https://www.haomeiwen.com/subject/iykkrftx.html