Próbuję serializować model zawierający pole właściwości, które również chcę serializować.ModelSerializer za pomocą właściwości modelu
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')
Kiedy próbuje dostać się do powiązanego adresu URL, dostaję wyjątek serializer (KeyError) na nieruchomości ext_link
.
Jak można przekształcić do postaci szeregowej właściwość ext_link
?
Dzięki! Działa teraz. –
*** Jedna uwaga ***: Lista pól w Meta jest opcjonalna. Jeśli pominiesz 'fields', w powyższym przykładzie, otrzymasz wszystkie pola' MyModel' oraz 'ext_link' w zserializowanych danych. A to jest naprawdę niesamowite dla złożonych modeli! * EDYCJA *: Przynajmniej dotyczy to 'djangorestframework == 2.3.14'. –
Dla mnie za pomocą serializers.Field dał błąd. "serializers.ReadOnlyField" działa, jeśli to_representation nie jest zdefiniowane, a widok jest tylko do odczytu. –