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__' |