美文网首页
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