Сериализатор Django Rest Framework не применяет значения по умолчанию для полей модели

Я работаю над простым проектом Django из документации drf, где у меня есть модель Snippet, которая использует библиотеку pygments для предоставления опций языка и стиля для фрагментов кода. Я установил значения по умолчанию для полей языка и стиля в моей модели, но когда я пытаюсь сериализовать эту модель с помощью Django Rest Framework (DRF), значения по умолчанию, похоже, не применяются при запуске сервера.

# models.py
from django.db import models
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles

LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLES = sorted([(style, style) for style in get_all_styles()])

class Snippet(models.Model):
    title = models.CharField(max_length=50, blank=True, default="")
    linenos = models.BooleanField(default=False)
    code = models.TextField()
    language = models.CharField(choices=LANGUAGES, default="python", max_length=50)
    style = models.CharField(choices=STYLES, default="monokai", max_length=50)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ["updated_at"]
#serializers.py
from rest_framework import serializers
from .models import Snippet


class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        fields = "__all__"

    def get_initial(self):
        initial = super().get_initial() or {}
        initial["language"] = Snippet._meta.get_field("language").get_default()
        initial["style"] = Snippet._meta.get_field("style").get_default()
        print(initial)
        return initial

{'title': '', 'linenos': False, 'code': '', 'language': 'python', 'style': 'monokai'}
{'title': '', 'linenos': False, 'code': '', 'language': 'python', 'style': 'monokai'}

но когда я запускаю сервер, выбор языка и стиля не устанавливается по умолчанию. вот изображениеenter image description here

используйте следующий код для передачи значения по умолчанию:

class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        fields = "__all__"
        extra_kwargs = {'language': {'default': 'python'}, 'style': {'default': 'monokai'}}
Вернуться на верх