我正在使用Django REST框架,对此还比较新手。
我希望在我的JSON输出中,对于manytomanyfield和foreignkey字段,能够有字符串表示而非值。
models.py
class Movie(models.Model):
"""Movie objects"""
name = models.CharField(max_length=128)
directorName = models.ForeignKey(Director)
genre = models.ManyToManyField(Genre)
serializers.py
class MovieSerializer(serializers.ModelSerializer):
"""
Serialiazing all the Movies.
"""
genre = serializers.PrimaryKeyRelatedField(many=True, queryset=Genre.objects.all())
directorName = serializers.PrimaryKeyRelatedField(queryset=Director.objects.all())
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Movie
fields = ('popularity',"directorName",'genre','imdbScore','name','owner')
JSON输出
{"popularity":"90.0","directorName":1,"genre":[1,2,3],"imdbScore":"8.9","name":"Titanic"}
我只得到了directorName和genre的值,而不是它们的display_name。
请建议如何纠正这个问题。
编辑 [已解决] 您需要重写PrimaryKeyRelatedField的to_representation()方法,因为它返回pk。
directorName
上设置了many=True
,这就是为什么它给我返回了'Director' object is not iterable
错误。但现在,我得到的是directorName
的字符串表示之外的内容 -"directorName": "<rest_framework.relations.PKOnlyObject object at 0x7f40ac40ca50>"
。 - RohanDirector
模型上添加一个__str__
方法。然后它应该正常工作。 - Rahul Guptastr(value)
更改为six.text_type(value)
。现在它应该能够同时处理Python2和Python3版本了。 - Rahul Gupta__unicode__
方法中,尝试这样写:return u'%s' % (self.name)
- Rahul Guptato_representation(self, value)
方法中得到了相同的rest_framework.relations.PKOnlyObject
对象作为值。我的解决方案是在我的自定义PrimaryKeyRelatedField
中重写use_pk_only_optimization
方法,将其返回False
,因为这个方法。 - Aylen