首页 文章

在Django中,'s the meaning of allow_blank and style = {' base_template ' : ' textarea.html'}作为CharField属性?

提问于
浏览
0

我刚刚开始在教程中逐步学习Django REST框架 .

在教程中,我声明了与Django表单非常相似的序列化程序,以便提供一种将代码段实例序列化和反序列化为表示形式的方法,例如 json .

这是snippets / 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]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted((item, item) for item in get_all_styles())


class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')
    code = models.TextField()
    linenos = models.BooleanField(default=False)
    language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
    style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)

    class Meta:
        ordering = ('created',)

这是snippets / serializers.py .

from rest_framework import serializers
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES


class SnippetSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(required=False, allow_blank=True, max_length=100)
    code = serializers.CharField(style={'base_template': 'textarea.html'})
    linenos = serializers.BooleanField(required=False)
    language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python')
    style = serializers.ChoiceField(choices=STYLE_CHOICES, default='friendly')

    def create(self, validated_data):
        return Snippet.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.title = validated_data.get('title', instance.title)
        instance.code = validated_data.get('code', instance.code)
        instance.linenos = validated_data.get('linenos', instance.linenos)
        instance.language = validated_data.get('language', instance.language)
        instance.style = validated_data.get('style', instance.style)
        instance.save()
        return instance

在Django文档中,我找不到allow_blank,style = {'base_template':'textarea.html'}作为CharField属性,所以我不知道它们是什么意思 .

我想知道models.py中的 title = models.CharField(max_length=100, blank=True, default='') 和serializers.py中的 title = serializers.CharField(required=False, allow_blank=True, max_length=100) 之间的区别 .

请告诉我 . 谢谢你的时间 .

1 回答

  • 1

    好的,首先,CharFields不会将空白和默认设置为True和空字符串 . 空白就够了 . 空白表示该字段不是必需的,可以为空 . 其次,在序列化程序中,您定义的绝对字段与模型中的字段完全相同 . 你可以逐字删除所有这些 . DRF为您做到了这一点,这就是重点 . 它只是模仿模型中描述的字段的属性 .

    您也可以删除创建和更新方法,它们会自动发生 .

    这就是你真正需要的 .

    from rest_framework import serializers
    from snippets.models import Snippet
    
    class SnippetSerializer(serializers.ModelSerializer):
        class Meta:
            model = Snippet
            fields = '__all__'
    

相关问题