我有一个由两个外键组成的模型,如下所示:
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作为此应用程序的用户界面。但我确实希望它能够发挥作用,而且我发现它在开发周期中具有无可估量的价值。
答案 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所期望的那样。