Python 在Django,什么';允许空白和样式={';基本模板';:';textarea.html';}作为CharField属性的含义是什么?

Python 在Django,什么';允许空白和样式={';基本模板';:';textarea.html';}作为CharField属性的含义是什么?,python,html,json,django,Python,Html,Json,Django,在教程中,我刚刚开始逐步学习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

在教程中,我刚刚开始逐步学习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)之间的区别

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

请告诉我。谢谢您的时间。

好的,首先,对于字符字段,不要将空白和默认值都设置为True和空字符串。空白就够了。空白表示该字段不是必填字段,可以为空。其次,在序列化程序中定义的字段与模型中定义的字段完全相同。你可以从字面上删除所有这些。DRF为你做的,这就是重点。它只是模仿模型中描述的字段的属性

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

这才是你真正需要的

from rest_framework import serializers
from snippets.models import Snippet

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

你好安德烈。谢谢你的帮助。我看过Django1.11文档,我必须在文档中将CharField属性设置为blank=True,但在Django REST框架教程中,允许_blank=True。我不确定blank=True是否等同于allow_blank=True。我不明白ordering=('created',)是什么意思。看,只有在序列化服务器上需要自定义字段时,才使用drf字段。如果您只需要来自model的,那么您只需要从ModelSerialiser中将serialiser子类化,就是这样。serialiser的CharField也是这样工作的。Blank True意味着它可以是空的。为了使用ModelSerializer,我应该导入它吗?看看我的示例。您可以导入
序列化程序
,然后从
序列化程序.ModelSerializer
中对您的进行子类化。非常感谢您的盛情款待。