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

如何在Django Rest Framework可浏览API中显示对象详细信息?,django,rest,django-rest-framework,Django,Rest,Django Rest Framework,这张图片应该可以解释我的问题: 我有一个由两个外键组成的模型,如下所示: 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):

这张图片应该可以解释我的问题:

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

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
它有一个简单的序列化程序,如下所示:

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,但是组合框中填充了“角色对象”和“人员对象”,因此用户无法在组合框中分辨他们正在选择的角色或人员

我该如何补救

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

提前谢谢

约翰


PS我无意将可浏览API作为此应用程序的用户界面。但是我确实希望它能够工作,并且我发现它在开发周期中非常宝贵。

要更改这些表示,您需要在模型上设置一个
\uuu str\uu
方法。而且,如果您使用的是Python2,那么还应该使用decorator装饰模型类。例如:

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

正如Python 2所期望的那样,装饰程序将基本上克隆
\uuuuu str\uuuuu
方法,并将其作为
\uuuuu unicode\uuuuu
提供。

您的
角色和
员工
模型上是否有
\uuu str\uuu
方法?啊!我定义了
\uuuuuunicode\uuuuuu
,但没有定义
\uuuuuuu str\uuuuuu
。将其更改为
\uuu str\uuu
修复了它。不过,我认为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?你应该同时做这两件事吗?事实上,Python3就是这样。您也可以使用Django的decorator使其在Python2中工作。另外,看起来我需要添加这个作为答案!