问题很简单,我正在订购购物车,我需要在订单生成时自动增加一个字段.但我不知道如何使整数字段自动递增:S任何帮助.
order.py
class Order(models.Model): cart = models.ForeignKey(Cart) add_date = models.DateTimeField(auto_now_add=True) order_number = models.IntegerField() enable = models.BooleanField(default=True)
Prashant Gau.. 67
在Django 1中:将有一个名为"id"的默认字段,它是自动增量.
2:您可以使用AutoField
字段将任何字段定义为自动增量 字段.
class Order(models.Model): auto_increment_id = models.AutoField(primary_key=True) #you use primary_key = True if you do not want to use default field "id" given by django to your model数据库设计
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | core_order | CREATE TABLE `core_order` ( `auto_increment_id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`auto_increment_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)如果要将django的默认id用作增量字段.
class Order(models.Model): dd_date = models.DateTimeField(auto_now_add=True)数据库设计
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | core_order | CREATE TABLE `core_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `dd_date` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
我需要这个整数字段. (6认同)
还要注意,您不能有多个AutoField,并且Django默认将一个用于id字段,因此,如果您既需要记录id和一个自动递增的整数字段,则该字段不表示主字段。键(例如,在用于保留数据插入顺序的“直通”模型中)时,此解决方案不起作用。 (3认同)
Chitrank Dix.. 18
在每个模型的django中,您将获得默认的id字段,即自动增量.但是如果你手动想要使用自动增量仍然.您只需在模型中指定即可AutoField
.
class Author(models.Model): author_id = models.AutoField(primary_key=True)
您可以在Django Documentation for AutoField中阅读有关django中auto字段的更多信息
在每个模型的django中,您将获得默认的id字段,即自动增量.但是如果你手动想要使用自动增量仍然.您只需在模型中指定即可AutoField
.
class Author(models.Model): author_id = models.AutoField(primary_key=True)
您可以在Django Documentation for AutoField中阅读有关django中auto字段的更多信息
在Django 1中:将有一个名为"id"的默认字段,它是自动增量.
2:您可以使用AutoField
字段将任何字段定义为自动增量 字段.
class Order(models.Model): auto_increment_id = models.AutoField(primary_key=True) #you use primary_key = True if you do not want to use default field "id" given by django to your model
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | core_order | CREATE TABLE `core_order` ( `auto_increment_id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`auto_increment_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
class Order(models.Model): dd_date = models.DateTimeField(auto_now_add=True)
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | core_order | CREATE TABLE `core_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `dd_date` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
您可以创建一个自动字段。这是相同的文档
请记住,Django在一个模型中不允许有多个AutoField,在您的模型中,您的主键已经有一个(默认)。因此,您将不得不重写模型的save方法,并且可能会从表中获取最后插入的记录,并相应地增加计数器并添加新记录。
请确保该代码线程安全,因为在有多个请求的情况下,您可能最终尝试为不同的新记录插入相同的值。
class Belly(models.Model): belly_id = models.AutoField(primary_key=True) belly_name = models.CharField(max_length=50)
********要么*******
class Belly(models.Model): belly_name = models.CharField(max_length=50)
不同之处是:
第一个表具有主键belly_id
(指定为AutoField
),第二个表具有主键id
(隐式).
我认为不需要直接使用它; 如果未指定,主键字段将自动添加到模型中.否则,请检查有关AutoField的Django文档以获取更多相关信息AutoField
.