问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-22 07:22

我来回答

3个回答

热心网友 时间:2022-04-18 08:04

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 = 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):
return 'bigint AUTO_INCREMENT'

def rel_db_type(self, connection):
return IntegerField().db_type(connection=connection) def validate(self, value, model_instance):
pass

def 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 None
return 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

热心网友 时间:2022-04-18 09:22

Django的表单验证框架可以从数据模型自动生成HTML表单,还可在与数据存储区交互的同时无缝处理通过表单输入的信息。要在Google App Engine上使用Django Forms,参考这篇文章在使用过程中会遇到一个问题,比如你在定义一个数据模型Book

热心网友 时间:2022-04-18 10:57

good = Goods.objects.all().values()
这个方法可以 获得每个字段的字典
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大学入学应该带哪些必备物品? tim删除聊天记录的方法步骤 pc端彻底删除tim聊天记录 甩脂机调到什么档位 如何用甩脂机 甩脂机的正确使用方法 使用抖脂机要注意什么 怎样申请小号微信号 ...的长和宽分别增加6米,扩建后草坪的面积增加了多少 ...扩建后长和宽分别增加10米,扩建后的操场面积增加了多少平方米?_百 ... 长方形的公园它的面积长和宽分别扩大十米后它的平方增加了面积增加了13... hibernate主键生成主键后可以自己定义主键吗 onkeyup这是什么意思,怎么使用?下面这段代码什么... The database returned no natively generated ide... qq里的厘米卡怎么得 ★求杀auto以及一些隐藏病毒的详细查杀方法★ 如何制作射频放大器? spring+hibernate hbm2ddl.auto 的问题 oracle hibernate ID 序列 自增长 问题, 基于注解 高分求C++ boost库 BOOST_AUTO宏的原理,有满意答... FM天线为什么要75Ω 在java开发中,用Jpa 做持久层 使用的数据库是orac... 电路用途收音机上电源通过FM天线信号线给天线放大... hibernate.hbm2ddl.auto设置的问题 请问下宽带放大器対FM信号有没有起放大作用 在java里,在一个类里创建另一个类的对象的作用?... orcale generationtype.auto注解是根据什么自增的 耳机线是如何能够作为fm收音天线的?麻烦讲清一下... 收音机安了fm天线放大器收到香港电台吗? mybatis-plus 怎么使用数据库默认id增值序列 FM信号放大电路 qq里怎样杷厘米卡发人? 如何用springboot写helloworld SQL语句问题,在线等 中auto病毒后,自动隐藏的文件显不出来!!! qq里的厘米人的道具怎么用? Spring框架中autowire,by name和by type有什么区别 ie 下 height:auto 怎么才能自适应高度 Brazzers Live Special - BACKSTAGE PASS 2 - Dest... brazzers live 43什么时候出 什么是快捷方式?如何创建?快捷方式与他对应的文件或软件有何关系? 电视体感游戏机哪个好 那种可以连接到电视上的,可以做运动,比如说打网... 体感电视游戏机哪个好 想买电视上可以玩的体感游戏机。给推荐下。给个建议。 请问电视上体感游戏(配体感摄像头)和体感游戏机... 想买个电视上的体感游戏机,求推荐,一千以下就行... 外星科技体感游戏机在什么电视上都能玩吗 体感游戏机适合哪种电视呢?体感游戏有多大辐射? 体感电视游戏机怎么样 电视互动体感游戏机对电视机有要求吗?