У объекта нет идентификатора - PullRequest
1 голос
/ 10 марта 2012

При нажатии «сохранить» (после создания нового экземпляра) на сайте администратора Django, я получаю

AttributeError at /admin/bankaccount/bank_account/add/
'Bank_Account' object has no attribute '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)

Ответы [ 2 ]

6 голосов
/ 10 марта 2012

Я предполагаю, что из вашего примера кода вы переопределили __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. Возможно, я неправильно понимаю вашу проблему с доменом.

Главное: не переопределять конструкторы, не убедившись, что вы выполняете всю работу конструктора в своем суперклассе (ах).

1 голос
/ 10 марта 2012

Я думаю, вам нужно вызвать родительский конструктор:

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