如何获取Django模型中自动生成的主键ID

abh*_*Dad 5 django django-models

我有一个DB Schema,我从一些遗留代码继承而来.现在我们打算使用Django将表格反映到模型中.这意味着我不能使用django模型生成表.表模式如下所示: -

mysql> desc student_profile;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| id          | int(11)     | NO   | PRI | NULL    | auto_increment |
| joining_on  | datetime    | YES  |     | NULL    |                |
| brothername | varchar(45) | YES  |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

现在我为这个模式创建的Django模型如下所示: -

class StudentProfile(models.Model):
    id=models.IntegerField(primary_key=True)
    joining_on=models.DateField()
    brothername=models.CharField(max_length=45)

    class Meta:
        db_table="student_profile"
Run Code Online (Sandbox Code Playgroud)

当我在其中插入一行时,如下所示: -

StudentProfile.objects.insert(brothername="Bro")
Run Code Online (Sandbox Code Playgroud)

该行已正确插入.但我没有办法提取id字段.看来,由于此字段不是a AutoField,django不会复制MySql自动生成的id.我该怎么做才能获得id创建行的值?我检查了(https://code.djangoproject.com/ticket/8799#comment:1),这似乎是设计的.但我仍然需要一种方法来实现id并将其反映在StudentProfile模型中.我能做什么?

一种解决方案可以是覆盖默认值save()并明确地提供idsave()模型中.但这是正确的方法吗?数据库(它是MySql)提供了一种生成id的方法,我必须能够利用这个事实,而不是必须通过应用程序维护一个运行的计数器.任何提示?

Sel*_*cuk 8

您可以id完全跳过定义列,即:

class StudentProfile(models.Model):
    # id=models.IntegerField(primary_key=True)
    joining_on=models.DateField()
    brothername=models.CharField(max_length=45)

    class Meta:
        db_table="student_profile"
Run Code Online (Sandbox Code Playgroud)

Django将创建或使用id默认命名的自动增量列,该列与您的旧列相同.

如果列名称不同,则可以使用AutoField具有不同名称的名称,例如:

my_id = models.AutoField(primary_key=True)
Run Code Online (Sandbox Code Playgroud)