发布网友 发布时间:2024-10-05 11:37
共1个回答
热心网友 时间:2024-10-05 12:00
导读:本篇文章首席CTO笔记来给大家介绍有关django如何获取表最大的id的相关内容,希望对大家有所帮助,一起来看看吧。
django怎样获得框架自动定义的自增id字段django自定义字段类型,实现非主键字段的自增
#-*-encoding:utf-8-*-fromdjango.db.models.fieldsimportField,IntegerFieldfromdjango.coreimportchecks,exceptionsfromdjango.utils.translationimportugettext_lazyas_classAutoIncreField(Field):
description=_("Integer")
empty_strings_allowed=False
default_error_messages={'invalid':_("'%(value)s'valuemustbeaninteger."),
}def__init__(self,*args,**kwargs):
kwargs['blank']=True
super(AutoIncreField,self).__init__(*args,**kwargs)defcheck(self,**kwargs):
errors=super(AutoIncreField,self).check(**kwargs)#每张表只能设置一个字段为自增长字段,这个字段可以是主键,也可以不是主键,如果不是主键,则必须设置为一种“键(key)”
#(primarykey)也是键(key)的一种,key还包括外键(foreignkey)、唯一键(uniquekey)
errors.extend(self._check_key())returnerrorsdef_check_key(self):
ifnotself.unique:return[
checks.Error('AutoIncreFieldsmustsetkey(unique=True).',
obj=self,
id='fields.E100',
),
]else:return[]defdeconstruct(self):
name,path,args,kwargs=super(AutoIncreField,self).deconstruct()delkwargs['blank']
kwargs['unique']=True
returnname,path,args,kwargsdefget_internal_type(self):
return"AutoIncreField"
defto_python(self,value):
ifvalueisNone:returnvaluetry:returnint(value)except(TypeError,ValueError):raiseexceptions.ValidationError(
self.error_messages['invalid'],
code='invalid',
params={'value':value},
)defdb_type(self,connection):
return'bigintAUTO_INCREMENT'
defrel_db_type(self,connection):
returnIntegerField().db_type(connection=connection)defvalidate(self,value,model_instance):
pass
defget_db_prep_value(self,value,connection,prepared=False):
ifnotprepared:
value=self.get_prep_value(value)
value=connection.ops.validate_autopk_value(value)returnvaluedefget_prep_value(self,value):
value=super(AutoIncreField,self).get_prep_value(value)ifvalueisNone:returnNone
returnint(value)defcontribute_to_class(self,cls,name,**kwargs):
assertnotcls._meta.auto_field,"Amodelcan'thavemorethanoneAutoIncreField."
super(AutoIncreField,self).contribute_to_class(cls,name,**kwargs)
cls._meta.auto_field=selfdefformfield(self,**kwargs):
returnNone
Django使用save新增一条数据之后如何获取自增idback?=?models.Back.objects.get(bookname=bookname)????#?查询你保存的那本书的记录
print(back.id)????#?打印出你要的新增记录的id值
如何限制Django模型中数值字段的最大值有两种方法可以做到这一点。一个是使用表单验证从不允许用户输入超过50的数字。表单验证文档。
如果进程中没有用户,或者你没有使用表单输入数据,那么你必须重写模型方法的save,或者将数据限制在字段中。
pythondjango查询mysql表字段的最大值如果你的表是用模型建立的话,类似这样
classPerson(models.Model):
qq=models.CharField(max_length=100)
要取Person模型中的id最大值的话,可以使用a=Person.objects.latest('id'),这样取到的是对应最大id的一个模型,a.id就是你要的值,然后a.qq就是最大id的qq号码
Django插入数据后,获取该数据id的方法
'''
classCar(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=100)
top_speed=models.IntegerField()
'''
'''
car=Car(name=car_name,top_speed=top_speed)
try:
car.save()
response=json.dumps([{'Success':'Caraddedsuccessfully!','id':car.id}])
'''
django如何解决单表数据大的问题通过mysql中间件来解决。
一般套路是在中间件中配置分表规则,一般也是分表维度和分表数量。
这样,程序要改动的地方只需要把数据库连接地址修改为中间件的地址就可以了,剩下的逻辑全部靠中间件来完成即可。
这种办法非常偷懒,但是可以解放RD的压力。
结语:以上就是首席CTO笔记为大家介绍的关于django如何获取表最大的id的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。