django 怎样获取自增id的_django怎样获得框架自动定义的自增id字段

慕莱坞7535251

django自定义字段类型,实现非主键字段的自增# -*- encoding: utf-8 -*-from django.db.models.fields import Field, IntegerFieldfrom django.core import checks, exceptionsfrom django.utils.translation import ugettext_lazy as _class AutoIncreField(Field):description = _("Integer")empty_strings_allowed = Falsedefault_error_messages = { 'invalid': _("'%(value)s' value must be an integer."),} def __init__(self, *args, **kwargs):kwargs['blank'] = Truesuper(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'] = Truereturn 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['invalid'],code='invalid',params={'value': value},) def db_type(self, connection):return 'bigint AUTO_INCREMENT'def rel_db_type(self, connection):return IntegerField().db_type(connection=connection) def validate(self, value, model_instance):passdef get_db_prep_value(self, value, connection, prepared=False):if not prepared:value = self.get_prep_value(value)value = connection.ops.validate_autopk_value(value) return value def get_prep_value(self, value):value = super(AutoIncreField, self).get_prep_value(value) if value is None: return Nonereturn int(value) def contribute_to_class(self, cls, name, **kwargs):assert not cls._meta.auto_field, "A model can't have more than one AutoIncreField."super(AutoIncreField, self).contribute_to_class(cls, name, **kwargs)cls._meta.auto_field = self def formfield(self, **kwargs):return None

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值