I created a ModelSerializer
and want to add a custom field which is not part of my model.
I found a description to add extra fields here and I tried the following:
customField = CharField(source='my_field')
When I add this field and call my validate()
function then this field is not part of the attr
dict. attr
contains all model fields specified except the extra fields. So I cannot access this field in my overwritten validation, can I?
When I add this field to the field list like this:
class Meta:
model = Account
fields = ('myfield1', 'myfield2', 'customField')
then I get an error because customField
is not part of my model - what is correct because I want to add it just for this serializer.
Is there any way to add a custom field?
To show
self.author.full_name
, I got an error withField
. It worked withReadOnlyField
:In fact there a solution without touching at all the model. You can use
SerializerMethodField
which allow you to plug any method to your serializer.here answer for your question. you should add to your model Account:
now you can use:
source: https://stackoverflow.com/a/18396622/3220916
You're doing the right thing, except that
CharField
(and the other typed fields) are for writable fields.In this case you just want a simple read-only field, so instead just use:
With the last version of Django Rest Framework, you need to create a method in your model with the name of the field you want to add.
...for clarity, if you have a Model Method defined in the following way:
You can add the result of calling said method to your serializer like so:
p.s. Since the custom field isn't really a field in your model, you'll usually want to make it read-only, like so: