Сериализатор 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'}
но когда я запускаю сервер, выбор языка и стиля не устанавливается по умолчанию. вот изображение
используйте следующий код для передачи значения по умолчанию:
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = "__all__"
extra_kwargs = {'language': {'default': 'python'}, 'style': {'default': 'monokai'}}