Chcę serializacji modelu, ale chcesz dołączyć dodatkowe pole, które wymaga robi kilka wyszukiwań bazy danych na przykład modelowego być szeregowane:Django REST ramowa: dodając dodatkowe pole do ModelSerializer
class FooSerializer(serializers.ModelSerializer):
my_field = ... # result of some database queries on the input Foo object
class Meta:
model = Foo
fields = ('id', 'name', 'myfield')
Jaki jest Właściwy sposób to zrobić? Widzę, że you can pass in extra "context" do serializera, jest właściwą odpowiedzią do przekazania w dodatkowym polu w słowniku kontekstowym? Dzięki takiemu podejściu logika uzyskania potrzebnej mi dziedziny nie byłaby niezależna od definicji serializera, co jest idealne, ponieważ każda wystąpienie serializowane będzie wymagać my_field
. Gdzie indziej w serializacjach DRF dokumentacja to says "dodatkowe pola mogą odpowiadać dowolnej właściwości lub można ją wywoływać na modelu". Czy dodatkowe pola, o których mówię? Czy powinienem zdefiniować funkcję w definicji modelu Foo
, która zwraca wartość my_field
, a w serializatorze podłączam my_field do tego wywołania? Jak to wygląda?
Z góry dziękuję, chętnie wyjaśniam pytanie w razie potrzeby.
+1, czy to też działa w przypadku CustomSerializer? –
Czy można dodać sprawdzanie poprawności do takich pól? moje pytanie brzmi: jak zaakceptować niestandardowe wartości POST, które można zwalidować i przetwarzać w procedurze post_save()? – Alp
Należy zauważyć, że SerializerMethodField jest tylko do odczytu, więc nie będzie działać dla przychodzących POST/PUT/PATCH. –