如何在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中工作。另外,看起来我需要添加这个作为答案!