[Answered ]-Create resource via POST specifying related field ID

2👍

Thanks to dukebody for suggesting implementing a custom related field to allow an attribute to be serialized OUT as a hyperlink, but IN as a primary key:

class HybridPrimaryKeyRelatedField(serializers.HyperlinkedRelatedField):
    """Serializes out as hyperlink, in as primary key"""
    def to_internal_value(self, data):
        return self.get_queryset().get(pk=data)

This lets me do away with the create override, the read_only_fields decorator, and the weirdness of swapping out the breed and breed_id:

class BreedSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Breed

class DogSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Dog

    breed = HybridPrimaryKeyRelatedField(queryset=Breed.objects, 
                                         view_name='breed-detail')

Leave a comment