ef设置非自增长id_django自定义非主键自增字段类型详解(auto increment field)

本文介绍了如何在 Django 中自定义一个名为 `AutoIncreField` 的字段类型,实现非主键字段的自动递增。详细讨论了字段的实现逻辑、使用方法、存在的问题以及解决方案。此外,还补充了 Django 模型中不同关系类型的介绍,如 ForeignKey、ManyToManyField 和 OneToOneField 的应用场景和相关设置。
摘要由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['invalid'],

code='invalid',

params={'value': value},

)

def db_type(self, connection):

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值