本篇文章首席CTO笔记来给大家介绍有关django的id是什么以及django名字什么意思的相关内容,希望对大家有所帮助,一起来看看吧。
本文目录一览:
1、django怎样获得框架自动定义的自增id字段2、Django的orm中怎么让外键字段不加_id3、关于django中取得当前登录用户id的问题4、Django 插入数据后,获取该数据id的方法5、django.foreignkey关联表id 为什么显示.objectsdjango怎样获得框架自动定义的自增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
Django的orm中怎么让外键字段不加_id
外键在数据库中的默认字段名是它在模型中的属性名+_id。可以在创建外键时使用db_column参数显式地指定一个字段名,来覆盖这么默认字段名。
author = models.ForeignKey('Author', on_delete=models.CASCADE, db_column='foobar')
那么数据库中这个外键字段名就是foobar,而不是author_id。
关于django中取得当前登录用户id的问题
Django的做法,是在artivle里面定义一个指向user的外键,这样就不用获得用户id,直接把用户对象赋值给那个外键属性就行了。
Django 插入数据后,获取该数据id的方法
'''
class Car(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': 'Car added successfully!', 'id': car.id}])
'''
django.foreignkey关联表id 为什么显示.objects
Djangomodel的ForeignKey在实际开发中引用的其实就是那个表的完整对象,而不是简单的对象id.
结语:以上就是首席CTO笔记为大家整理的关于django的id是什么的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django名字什么意思、django的id是什么的相关内容别忘了在本站进行查找喔。