为什么CreateView中的self.object在保存到数据库后没有id?

ZAD*_*Man 5 python mysql django django-class-based-views

在对django createview上接受的答案的评论如何获取创建的对象之后,我试图使用CreateViewget_success_url方法中由a创建的用户的id .但是,即使它确实被保存到MySQL并且接收到id,但是当我访问self.object它时,它没有要使用的id.该模型确实有一个id属性.为什么我无法访问ID?如果我被链接评论误导,获得身份证的正确方法是什么?

参考代码:

models.py

from django.db import models

class User(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=128)
    active = models.BooleanField(blank=True)
    created_date = models.DateTimeField()
    class Meta:
        managed = False
        db_table = 'user'
    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

views.py

from django.views.generic import CreateView
from django.core.urlresolvers import reverse
from forms import AddUserForm

class AddUserView(CreateView):
    form_class = AddUserForm
    fields = ['name', 'active'] # id and created_date are auto-filled upon save
    template_name = 'webApp/add_user_form.html'

    def get_success_url(self):
        print self.object # Prints the name of the submitted user
        print self.object.id # Prints None
        return reverse("webApp:user:stepTwo", args=(self.object.id,))
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

它是空白的,因为该对象实际上没有收到ID.那是因为该id字段应该是一个AutoField,而不是IntegerField,因此它被声明为自动递增.

实际上虽然你根本不应该声明它:一个名为id的主键AutoField是默认值,所以你应该把它留下来.

请注意,在进行此更改后,您需要迁移数据库表,或者删除并重新创建它.