gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:05:15 28 4
gpt4 key购买 nike

在对 django createview how to get the object that is created 上接受的答案发表评论之后,我试图在其 get_success_url 方法中使用由 CreateView 创建的用户的 ID。然而,即使它肯定被保存到 MySQL 并接收一个 id,当我访问 self.object 时,它没有可用的 id。该模型确实有一个 id 属性。为什么我不能访问id?如果我被链接的评论误导了,获取 ID 的正确方法是什么?

引用代码:

模型.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

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,))

最佳答案

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

实际上,尽管您根本不应该声明它:名为 id 的主键 AutoField 是 the default , 所以你应该把它去掉。

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

关于python - 为什么保存到数据库后 CreateView 中的 self.object 没有 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212745/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com