2012-03-10 145 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) 
    ...