django自定义非主键自增字段类型详解(auto increment field)

本文详细介绍了如何在Django中自定义非主键字段以实现自增功能,包括使用方法、遇到的问题及bug修复。同时,补充了Django model中表与表的关系,如一对多、多对多、一对一关系的应用场景,以及ForeignKey外键的跨表操作示例。
摘要由CSDN通过智能技术生成

1.django自定义字段类型,实现非主键字段的自增


    # -*- encoding: utf-8 -*-
    
    from django.db.models.fields import Field, IntegerField
    from django.core import checks, exceptions
    from django.utils.translation import ugettext_lazy as _
    
    
    class AutoIncreField(Field):
     description = _("Integer")
    
     empty_strings_allowed = False
     default_error_messages = {
   
     'invalid': _("'%(value)s' value must be an integer."),
     }
    
     def __init__(self, *args, **kwargs):
     kwargs['blank'] = True
     super(AutoIncreField, self).__init__(*args, **kwargs)
    
     def check(self, **kwargs):
     errors = super(AutoIncreField, self).check(**kwargs)
     # 每张表只能设置一个字段为自增长字段,这个字段可以是主键,也可以不是主键,如果不是主键,则必须设置为一种“键(key)”
     # (primary key)也是键(key)的一种,key还包括外键(foreign key)、唯一键(unique key)
     errors.extend(self._check_key())
     return errors
    
     def _check_key(self):
     if not self.unique:
      return [
      checks.Error(
       'AutoIncreFields must set key(unique=True).',
       obj=self,
       id='fields.E100',
      ),
      ]
     else:
      return []
    
     def deconstruct(self):
     name, path, args, kwargs = super(AutoIncreField, self).deconstruct()
     del kwargs['blank']
     kwargs['unique'] = True
     return name, path, args, kwargs
    
     def get_internal_type(self):
     return "AutoIncreField"
    
     def to_python(self, value):
     if value is None:
      return value
     try:
      return int(value)
     except (TypeError, ValueError):
      raise exceptions.ValidationError(
      self.error_messages
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值