1. 程式人生 > 其它 >Django 欄位型別,欄位引數,以及在drf中的使用。

Django 欄位型別,欄位引數,以及在drf中的使用。

欄位型別

# models中CharField,DecimalField.....


# 記住的:
	CharField
  IntegerField
  FloatField
  DecimalField
  DateTimeField
  DateField

# 知道--》models中沒有的---》反序列化的時候,前端傳入的
{name:lqz,age:19,hobby:[籃球,足球],wife:{name:lyf,age:38}}
	ListField
  DictField
欄位 欄位構造方式
BooleanField BooleanField()
NullBooleanField
NullBooleanField()
CharField CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
EmailField EmailField(max_length=None, min_length=None, allow_blank=False)
RegexField RegexField(regex, max_length=None, min_length=None, allow_blank=False)
SlugField SlugField(maxlength=50, min_length=None, allow_blank=False) 正則欄位,驗證正則模式 [a-zA-Z0-9
-]+
URLField URLField(max_length=200, min_length=None, allow_blank=False)
UUIDField UUIDField(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"
IPAddressField IPAddressField(protocol=’both’, unpack_ipv4=False, **options)
IntegerField IntegerField(max_value=None, min_value=None)
FloatField FloatField(max_value=None, min_value=None)
DecimalField DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位數 decimal_palces: 小數點位置
DateTimeField DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
DateField DateField(format=api_settings.DATE_FORMAT, input_formats=None)
TimeField TimeField(format=api_settings.TIME_FORMAT, input_formats=None)
DurationField DurationField()
ChoiceField ChoiceField(choices) choices與Django的用法相同
MultipleChoiceField MultipleChoiceField(choices)
FileField FileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ImageField ImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ListField ListField(child=, min_length=None, max_length=None)
DictField DictField(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(可執行物件)