首页>>后端>>Python->django如何设置主键自增(django更新外键)

django如何设置主键自增(django更新外键)

时间:2023-12-01 本站 点击:0

今天首席CTO笔记来给各位分享关于django如何设置主键自增的相关内容,其中也会对django更新外键进行详细介绍,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、Django 主键自增2、如何自定义 Django 主键自增的起始值3、Django中Sqlite3自增主键归零的操作方法,大神急救4、django中model的主键的设置与自增5、django怎样获得框架自动定义的自增id字段

Django 主键自增

from django.db import models

# Create your models here.

class Student(models.Model):

    student_id = models.BigAutoField(primary_key=True)

这是model定义。

默认情况下,自增id都是从1开始计数的。如果你想从10001开始,就需要手动创建一个对象,为其设置student_id为10001,以后创建对象的studeng_id就从10002开始自动增加。

first_student =models.Student(student_id=10001)

first_student.save()

更多相关内容参考刘江的Django教程

如何自定义 Django 主键自增的起始值

1234

from django.db import models# Create your models here.class Student(models.Model): student_id = models.BigAutoField(primary_key=True)

这是model定义。

默认情况下,自增id都是从1开始计数的。如果你想从10001开始,就需要手动创建一个对象,为其设置student_id为10001,以后创建对象的studeng_id就从10002开始自动增加。

first_student =models.Student(student_id=10001)

first_student.save()

更多相关内容参考刘江的Django教程

Django中Sqlite3自增主键归零的操作方法,大神急救

原则上这个表是不让你修改的,也是不能修改的,Django不支持这种操作。

自增主键是数据表用来确定一条记录的唯一方法,你让它归零了,那么以前的记录怎么办?肯定会发生冲突的。如果你不需要以前的数据,并且数据也不重要,那直接删库,重新来,主键就归零了(谨慎操作)。

推荐一个Django学习教程,Django高级教程

django中model的主键的设置与自增

在django所定义的model里是可以自己设置主键的,具体方法为

但是要注意的是,为了添加元素的过程中主键的自增,主键的设置中不能加入default属性,否则save()的过程将不再是新建元素而是替换元素。

自己在最开始的定义是

AgentInfo_id = models.IntegerField(default=0)

由于设置了默认值,引发了不小的麻烦

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

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

结语:以上就是首席CTO笔记为大家介绍的关于django如何设置主键自增和django更新外键的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/5727.html