Django休息框架显示模型的特定字段

时间:2016-03-24 13:36:17

标签: python django django-rest-framework

在我的模特中:

from django.contrib.auth.models import User

class Restaurant(models.Model):
    manager = models.ForeignKey(User, on_delete=models.PROTECT,
                                  null=True, blank=False, related_name="manager")

在我的serializers.py

class RestaurantSerializer(CoreHyperlinkedModelSerializer):

    class Meta:
        model = Restaurant

在我的views.py

class RestaurantViewSet(viewsets.ModelViewSet):
    queryset = Restaurant.objects.order_by('id').all()
    serializer_class = RestaurantSerializer

在我的名单上:

经理显示为<rest_framework.relations.PKOnlyObject object at 0x9f7040xbc208>

如何将其显示为普通数据,如用户名?

2 个答案:

答案 0 :(得分:0)

您想使用'SlugRelatedField'

答案 1 :(得分:0)

有几种方法可以,但如果您只是想显示用户名,那么您只需要这个

from rest_framework import serializers

class RestaurantSerializer(serializers.ModelSerializer):
    manager = serializers.CharField(source="manager.username")

    class Meta:
        model = Restaurant

如果从ModelSerializer继承并跳过manager字段,默认情况下它将使用用户PK作为manager字段的值。

稍微复杂一点的方法是为User定义一个单独的序列化程序,然后将其嵌入到RestaurantSerializer中。

from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User

class RestaurantSerializer(serializers.ModelSerializer):
    manager = UserSerializer()

    class Meta:
        model = Restaurant

如果你真的想使用超链接序列化器,你需要做很多工作。您需要仔细阅读此部分http://www.django-rest-framework.org/api-guide/serializers/#how-hyperlinked-views-are-determined