2012-03-10 82 views
1

当“保存”点击Django管理站点(创建一个新的实例后)我得到一个对象没有ID

AttributeError at /admin/bankaccount/bank_account/add/ 
'Bank_Account' object has no attribute 'id' 

我没有创建模型中的任何标识。该教程说ID是自动管理的。 任何想法,为什么我得到这个?

我的模型:

class Bank_Account(models.Model): 
    iban = models.CharField(max_length = 30) 
    bic = models.CharField(max_length = 30) 

def __init__(self): 
    self.iban = 0 
    self.bic = 0 

我的admin.py

from bankaccount.models import Bank_Account 
from django.contrib import admin 

admin.site.register(Bank_Account) 
+1

你可以发布你是怎么注册BANK_ACCOUNT模型您的管理? – 2012-03-10 19:12:28

回答

6

我从您的代码示例假设你已经覆盖了__init__(构造函数)在Bank_Account模型。但是你还没有叫超级。其实,你采取的行动应该在模型中表示为默认值:

class BankAccount(models.Model): 
    iban = models.CharField(max_length = 30, default="0") 
    bic = models.CharField(max_length = 30, default="0") 

这应该可以正常工作。不过,我不确定为什么你要这些默认值;我认为没有默认值,在这种情况下null=False, blank=False更合适,因为银行账户肯定会同时拥有IBAN和BIC。不过,也许我误解了你的域名问题。

关键是:如果不确保在超类中执行构造函数的所有工作,请不要重写构造函数。

+0

+1。你真的不希望在'__init__'中这样做,因为它可以确保'iban'和'bic' **总是** 0,即使你正在从数据库加载一个现有帐户。 – 2012-03-10 19:23:38

+0

你的权利。我删除了构造函数,它工作。谢谢! – 2012-03-10 19:33:22

1

我认为你需要调用父类的构造函数:

def __init__(self, *args, **kwargs): 
    models.Model.__init__(self, *args, **kwargs) 
    ...