Django Model поле по умолчанию переопределяется seriliazer

Я установил значение по умолчанию publish в True в модели, но после создания новой записи в EntrySerializer она сохраняется как False. Я могу исправить это вручную, переопределив метод create() в сериализаторе, но мне интересно, есть ли более элегантный способ.

class EntrySerializer(serializers.ModelSerializer):

    class Meta:
        model = Entry
        fields = '__all__'
        read_only_fields = ['author', 'slug', 'created', 'modified']

Моя модель

class Entry(models.Model):
    slug = models.SlugField(max_length=255)
    title = models.CharField(max_length=200)
    description = models.TextField()
    publish = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        if not self.id:
            slug_str = "%s %s" % ( uuid4().hex[:6].upper(), self.title) 
            self.slug = slugify(slug_str)

        super(Entry, self).save(*args, **kwargs)

Результаты почтового запроса

{
    "id": 9,
    "slug": "f4eabc-new-test",
    "title": "new test",
    "description": "dsfsdfs",
    "publish": false,
    "created": "2022-02-22T03:12:52.479158Z",
    "modified": "2022-02-22T03:12:52.479190Z",
}

Я обнаружил, что мне нужно добавить publish к read_only_fields

class EntrySerializer(serializers.ModelSerializer):    

    class Meta:
        model = Entry
        fields = '__all__'
        read_only_fields = ['author', 'publish', 'slug', 'created', 'modified']
Вернуться на верх