Django Rest框架中的ForiegnKey字段序列化程序

时间:2014-06-09 14:17:37

标签: python django python-2.7 python-3.x django-rest-framework

在发布此问题之前,我已经阅读了几个关于SOF的问题。但它们来自2012年,也非常令人困惑。 例如Django Rest Framework - Get related model field in serializer

我的问题很直接

models.py

class User(models.Model):
    username = models.CharField(max_length=100,unique=True)
    password = models.CharField(max_length=100,null=False,blank=False)

class Car(models.Model):
    user = models.ForeignKey(User)
    car_name = models.CharField(max_length=100,null=True,blank=True)

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username','password' )

class CarSerializer(serializers.ModelSerializer):
    #user = ?? what should I write or is there any better approach for serializing Car objects
    class Meta:
        model = Car
        fields = ('user','car_name')

views.py

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class CarViewSet(viewsets.ModelViewSet):
    queryset = Car.objects.all()
    serializer_class = CarSerializer

请建议所有可能的方法。

另外1个查询。哪一个更好ModelSerializerHyperlinkModelSerializer。因为我看到包含这两个的不同答案。

1 个答案:

答案 0 :(得分:3)

你只需要这样做:

class CarSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    class Meta:
        model = Car
        fields = ('user','car_name')

就是这样。

此外,您应该查看serializers.Fieldserializers.SerializerMethodField的好意,您可以使用它们并根据需要自定义您的响应数据。

关于HyperlinkedModelSerializer - ModelSerializer的问题,非常清楚here

HyperlinkedModelSerializerModelSerializer存在以下差异:

  • 默认情况下不包括pk字段。
  • 它包含一个使用HyperlinkedIdentityField的网址字段。
  • 关系使用HyperlinkedRelatedField,而不是PrimaryKeyRelatedField

希望有所帮助。