id field in django rest framework serializer

前端 未结 3 1856
梦毁少年i
梦毁少年i 2020-12-14 02:35

I\'m using django rest framework and just creating a simple serializer like this:

class PackageSerializer(serializers.HyperlinkedModelSerializer):

    class         


        
相关标签:
3条回答
  • 2020-12-14 03:12

    I just tweaked this to make it a little more pluggable by creating this class:

    class HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer):
        """Extend the HyperlinkedModelSerializer to add IDs as well for the best of
        both worlds.
        """
        id = serializers.ReadOnlyField()
    

    Then, just use that to make your serializer and you're on your way.

    0 讨论(0)
  • 2020-12-14 03:14

    According to the Django Rest Framework Documentation:

    The default implicitly-generated id field is marked as read_only. This causes it to be removed on updates.

    Thus, if you need the id field in an update method, you must not declare it as read-only but use a read-write field instead:

    class PackageSerializer(serializers.ModelSerializer):
        id = serializers.IntegerField()
    
    0 讨论(0)
  • 2020-12-14 03:25

    HyperlinkedModelSerializer doesn't include the id by default. In 2.2 and earlier you'll need to add it explicitly as a field...

    class PackageSerializer(serializers.HyperlinkedModelSerializer):
        id = serializers.Field()
    
        class Meta:
            model = Package
            fields = ('id', 'url', 'title','location')
    

    From 2.3 onwards, you can simply add 'id' to the fields option...

    class PackageSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = Package
            fields = ('id', 'url', 'title','location')
    

    From 3.x (< 3.3) onwards, you must use ReadOnlyField() instead of Field() if you want to add it explicitly and not use the fields option...

    class PackageSerializer(serializers.HyperlinkedModelSerializer):
        id = serializers.ReadOnlyField()
    
        class Meta:
            model = Package
    
    0 讨论(0)
提交回复
热议问题