Django中自定义model字段类型Field

2025-10-23 15:31:03

1、django自定义一个简单的字段

首先导入django models

from django.db import models

然后定义一个 获取字典类型的函数,该函数返回一个字典类型的参数

def get_kargs(**kwargs):    return kwargs

(关于**kwargs的使用可以看我之前写过的一个经验)

Django中自定义model字段类型Field

2、接着我们开始定义这个简单字段 地址(AddressField)

for 循环中能够获取到一个字典类型参数,然后方便我们,在odels.CharField中直接对它使用models.CharField(address,**kwargs),第一个是传入的参数,第二个是该参数的条件。

def AddressField(address,**kwargs):   for k ,v in get_kargs(db_index=True, null=False, blank=False, max_leng     h=190).items():       if k not in kwargs:           kwargs[k]=v   return models.CharField(address,**kwargs)

到此这个字段定义完成

Django中自定义model字段类型Field

3、我们在自定义一个字段,首先也是 引入models

class TestField(models.Field):    __metaclass__ =models.SubfieldBase    description = 'TestField'    def __init__(self,**kwargs):        models.Field.__init__(self,**kwargs)

   def value_to_string(self, obj):        return self.get_prep_value(self._get_val_from_obj(obj))

 get_prep_value 用于将Python变量保存到数据库,执行初步的非DB特定值检查和转换。

以上的**kwargs是传入的字典参数

Django中自定义model字段类型Field

4、**kwargs是传入的字典参数,可以传入如下一些字段

null=True   字段是否可以为空

blank=True     后台Admin 中添加数据时是否可允许空值

primary_key = False  主键

auto_now 和 auto_now_add

  auto_now   自动创建,当前操作的时间

  auto_now_add  自动创建-,创建时的时间

choices 选择字段,可以定义为一个字典类型

max_length  最大长度

default  设置默认值

verbose_name  Admin中字段的显示名称

db_column  数据库字段名称

unique=True  不允许重复,默认false

db_index = True  数据库索引

editable=True  在Admin里是否可编辑

error_messages=None  错误提示

auto_created=False  自动创建

help_text  Admin中提示帮助信息

validators=[]  验证字段

upload-to  上传路径

Django中自定义model字段类型Field

5、字段使用,对于添加的字段,我们只要在model中引入,即可使用

class User(models.Model):    

      name=models.CharField(max_length=100)    

      address=AddressField()    text=TestField()

Django中自定义model字段类型Field

6、django field中常用的字段 CharField

字符串字段,用于小到大的字符串。

对于大量的文本,使用TextField.

此字段的默认窗体小部件是TextInput.

CharField有一个特点:

CharField.max_length

字段的最大长度(以字符为单位)。max_Length在数据库级别和Django的验证中强制执行

更多关于django的字段详细说明可以访问django官网查看

Django中自定义model字段类型Field

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢