在我的模特中:
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>
如何将其显示为普通数据,如用户名?
答案 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