我想显示用户所有联系人的姓名(和URL).我写了以下序列化器:
class ContactsUserSerializer(serializers.ModelSerializer): class Meta: model = get_user_model() fIElds = ("username","email")class ContactsSerializer(serializers.ModelSerializer): # user = ContactsUserSerializer(many=True) # raises TypeError: 'User' object is not iterable class Meta: model = UserProfile fIElds = ("user",)class UserSerializer(serializers.HyperlinkedModelSerializer): contacts = ContactsSerializer(many=True) class Meta: model = get_user_model() fIElds = ("url","username","email","contacts")
哪个回归
{ "url": "http:\/\/localhost:8080\/users\/1\/","username": "test1","email": "","contacts": [ { "user": 2 },{ "user": 1 } ]}
但我希望它是:
{ "url": "http:\/\/localhost:8080\/users\/1\/","contacts": [ { "url": "http://link_to_user","username": "foo" },{ "url": "http://link_to_user","username": "bar" } ]}
我怎样才能做到这一点?我已经尝试为联系人用户添加另一个序列化程序但是引发了类型错误:“用户”对象不可迭代,JsON结构看起来有点尴尬:{contacts:[user:{“username”:… },]},如果他对Django的用户配置文件没有信心,可能会混淆API的用户.
解决方法 您的ContactsSerializer需要是HyperlikedModelSerializer才能自动添加url字段.由于您需要将url字段指向其他模型,因此实际上需要使用HyperlinkedRelatedFIEld并将其作为自定义字段添加到序列化程序中.class ContactsSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedRelatedFIEld(vIEw_name="user-detail",source="user") username = serializers.CharFIEld(source="user.username") class Meta: model = UserProfile fIElds = ("url",)
您可以将source参数用于字段,以使用模型上的不同字段而不是显示的字段.在这种情况下,我们使用配置文件中用户关系的字段.
如果您使用路由器或遵循教程,则user-detail将是默认视图名称.您可能需要调整此项以匹配您的详细信息视图名称.
总结以上是内存溢出为你收集整理的Django Rest Framework – 嵌套用户中的用户配置文件全部内容,希望文章能够帮你解决Django Rest Framework – 嵌套用户中的用户配置文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)