it-swarm.com.de

ModelSerializer mit Modelleigenschaft

Ich versuche, ein Modell zu serialisieren, das ein Eigenschaftsfeld enthält, das ich auch serialisieren möchte.

models.py:

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    slug = models.AutoSlugField(populate_from='name')

    @property
    def ext_link(self):
        return "/".join([settings.EXT_BASE_URL, self.slug])

serializers.py:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ('name', 'ext_link')

Beim Versuch, auf die zugehörige URL zuzugreifen, wird eine Serializer-Ausnahme (KeyError) für die Eigenschaft ext_link Angezeigt.

Wie kann ich die Eigenschaft ext_link Serialisieren?

74
Sander Smits

Da es sich nicht um ein Modellfeld handelt, muss es explizit zur Serializer-Klasse hinzugefügt werden

class MyModelSerializer(serializers.ModelSerializer):
    ext_link = serializers.Field()

    class Meta:
        model = MyModel
        fields = ('name', 'ext_link')
110
Tom Christie

wie @Robert Townley 's Kommentar, diese Arbeit mit Version 3.8.2:

class MyModelSerializer(serializers.ModelSerializer):
    ext_link = serializers.ReadOnlyField()

    class Meta:
        model = MyModel
        fields = "__all__"
5
suhailvs