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



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

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

这是片段/模型.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',)

这是代码片段/序列化程序.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 中的 CharField(max_length=100,空白=True,默认值=''(,标题 = 序列化程序。CharField(required=False, allow_blank=True, max_length=100( in serializers.py.

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

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

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

这就是你真正需要的。

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

最新更新