如何在Django Rest Framework可浏览的API中显示对象详细信息?

时间:2015-11-17 01:22:51

标签: django rest django-rest-framework

此图片应解释我的问题: enter image description here

我有一个由两个外键组成的模型,如下所示:

class StaffRole(models.Model):
staff = models.ForeignKey(Staff, related_name='roles')
role = models.ForeignKey(Role, related_name='staff')

class Meta:
    unique_together = ('staff', 'role')

def __str__(self):
    return '%s / %s' % (self.staff, self.role)

它有一个简单的序列化程序,如下所示:

class StaffRoleSerializer(serializers.HyperlinkedModelSerializer):
role = serializers.SlugRelatedField(
    queryset=Role.objects.all(),
    slug_field='slug'
)
staff = serializers.SlugRelatedField(
    queryset=Staff.objects.all(),
    slug_field='slug'
)

class Meta:
    model = StaffRole

使用Django Rest Framework SlugRelatedField,我希望可浏览API中的组合框将显示相关模型的slug,但是组合框中填充了“Role Object”和“Staff Object”字样,因此,用户无法告诉他们在组合框中选择了哪个角色或哪些人员。

我该如何解决这个问题?

为了避免复杂性,我试图使用默认的DRF序列化程序,例如SlugRelatedField,而不是编写我自己的嵌套序列化程序。除了可浏览API中的组合框外,一切正常。

提前致谢

约翰

PS我不打算将可浏览的API作为此应用程序的用户界面。但我确实希望它能够发挥作用,而且我发现它在开发周期中具有无可估量的价值。

1 个答案:

答案 0 :(得分:1)

要更改这些表示,您需要在模型上设置__str__方法。而且,如果您使用的是Python 2,那么您还应该使用python_2_unicode_compatible装饰器来装饰模型类。例如:

from django.db import models
from django.utils.encoding import python_2_unicode_compatible


@python_2_unicode_compatible
class Role(models.Model):
    name = models.CharField(...)

    def __str__(self):
        return self.name

装饰器将基本上克隆__str__方法,并使其可用__unicode__,就像Python 2所期望的那样。