Django 字段类型,字段参数,以及在drf中的使用。

字段类型

# models中CharField,DecimalField.....


# 记住的:
	CharField
  IntegerField
  FloatField
  DecimalField
  DateTimeField
  DateField

# 知道--》models中没有的---》反序列化的时候,前端传入的
{name:lqz,age:19,hobby:[篮球,足球],wife:{name:lyf,age:38}}
	ListField
  DictField
字段字段构造方式
BooleanFieldBooleanField()
NullBooleanFieldNullBooleanField()
CharFieldCharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
EmailFieldEmailField(max_length=None, min_length=None, allow_blank=False)
RegexFieldRegexField(regex, max_length=None, min_length=None, allow_blank=False)
SlugFieldSlugField(maxlength=50, min_length=None, allow_blank=False) 正则字段,验证正则模式 [a-zA-Z0-9-]+
URLFieldURLField(max_length=200, min_length=None, allow_blank=False)
UUIDFieldUUIDField(format=’hex_verbose’) format: 1) 'hex_verbose'"5ce0e9a5-5ffa-654b-cee0-1238041fb31a" 2) 'hex'"5ce0e9a55ffa654bcee01238041fb31a" 3)'int' - 如: "123456789012312313134124512351145145114" 4)'urn' 如: "urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a"
IPAddressFieldIPAddressField(protocol=’both’, unpack_ipv4=False, **options)
IntegerFieldIntegerField(max_value=None, min_value=None)
FloatFieldFloatField(max_value=None, min_value=None)
DecimalFieldDecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数 decimal_palces: 小数点位置
DateTimeFieldDateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
DateFieldDateField(format=api_settings.DATE_FORMAT, input_formats=None)
TimeFieldTimeField(format=api_settings.TIME_FORMAT, input_formats=None)
DurationFieldDurationField()
ChoiceFieldChoiceField(choices) choices与Django的用法相同
MultipleChoiceFieldMultipleChoiceField(choices)
FileFieldFileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ImageFieldImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ListFieldListField(child=, min_length=None, max_length=None)
DictFieldDictField(child=)

字段参数

# 写在字段类中的参数--》如:max_length。。。


# 重点:
read_only:表明该字段仅用于序列化输出,默认False
  -如果read_only=True,这个字段只用来做序列化---》把对象---》json给前端
write_only:表明该字段仅用于反序列化输入,默认False
  -如果read_only=write_only,这个字段只用来做反序列化---》前端json---》存到数据库
  
  
# 举例
    name=serializers.CharField(max_length=32,min_length=3)
    price=serializers.CharField(write_only=True,read_only=True)
    author=serializers.CharField(write_only=True)
   
    
    # 什么都不写,表示既序列化,又反序列化
    # 序列化给前端,前端看到的字段样子---》只能看到name
    # 反序列化,前端需要传什么过来name,price,author都传
    
    # write_only=True,read_only=True 逻辑矛盾

选项参数:

参数名称作用
max_length最大长度(CharField)
min_lenght最小长度(CharField)
allow_blank是否允许为空(CharField)
trim_whitespace是否截断空白字符(CharField)
max_value最小值 (IntegerField)
min_value最大值(IntegerField)

通用参数

参数名称说明
read_only表明该字段仅用于序列化输出,默认False
write_only表明该字段仅用于反序列化输入,默认False
required表明该字段在反序列化时必须输入,默认True
default反序列化时使用的默认值
allow_null表明该字段是否允许传入None,默认False
validators该字段使用的验证器(不太用)
error_messages包含错误编号与错误信息的字典
label用于HTML展示API页面时,显示的字段名称
help_text用于HTML展示API页面时,显示的字段帮助提示信息

序列化时,定制序列化的字段

### 两种方案


# 作用?比如author关联了外键,想取出作者详情
# author_info = serializers.SerializerMethodField()
# def get_author_info(self,obj):
#     return {'name':obj.author.name,'age':obj.author.age}
# 第一种:在序列化类中写
# price_info = serializers.SerializerMethodField()  # 必须配合一个方法,方法名get_字段名
# def get_price_info(self, obj): # 方法返回什么,字段就是什么,obj是当前序列化到的单个对象
#     return "价格是:"+str(obj.price)  # python是动态强类型语言--》强类型是:不同类型之间不允许直接运算

# 第二种方案:在models中写方法,这里字段名就是models的方法名,price_info方法返回什么,这个字段就是什么
# price_info=serializers.CharField()
authors=serializers.ListField()

序列化类中写

price_info = serializers.SerializerMethodField()  # 必须配合一个方法,方法名get_字段名
def get_price_info(self, obj): # 方法返回什么,字段就是什么,obj是当前序列化到的单个对象
   return "价格是:"+str(obj.price)  # python是动态强类型语言--》强类型是:不同类型之间不允许直接运算

表模型中写

# 表模型中写方法
@property   # 把方法包装成数据属性
def price_info(self):
   return "价格是:" + str(self.price)
  
# 序列化类中使用
price_info=serializers.CharField(read_only=True)  # 只用来做序列化
# authors=serializers.ListField()

扩展on_delete:

on_delete
  当删除关联表中的数据时,当前表与其关联的行的行为。

  models.CASCADE
  删除关联数据,与之关联也删除

  models.DO_NOTHING
  删除关联数据,引发错误IntegrityError

  models.PROTECT
  删除关联数据,引发错误ProtectedError

  models.SET_NULL
  删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

  models.SET_DEFAULT
  删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

  models.SET

  删除关联数据,
  a. 与之关联的值设置为指定值,设置:models.SET(值)
  b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值