关于python:在Django中,allow_blank和style = {‘base_template’:’textarea.html’}作为CharField属性的含义是什么?

In Django, what's the meaning of allow_blank and style = {'base_template' : 'textarea.html'} as CharField attribute?

我刚刚开始在教程中逐步学习django-rest框架。

在本教程中,我声明序列化程序的工作方式与Django的形式非常相似,以便提供将代码段实例序列化和反序列化为JSON等表示形式的方法。

这里是snippets/models.py。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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/serializer.py。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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='')和title=serializer.py中的charfield(required=false,allow_blank=true,max_length=100)之间的区别。

请告诉我。谢谢你抽出时间。


好的,首先,对于charfields,不要同时将空白和默认值设置为true和空字符串。空白就足够了。空白表示该字段不是必需的,可以为空。其次,在序列化程序中,您定义的字段与模型中的字段完全相同。你真的可以把这些都去掉。医生为你做的,这就是重点。它只是模仿模型中描述的字段的属性。

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

这就是你真正需要的。

1
2
3
4
5
6
7
from rest_framework import serializers
from snippets.models import Snippet

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