Поля формы для ModelForm с унаследованными моделями - PullRequest
13 голосов
/ 31 марта 2011

У меня есть абстрактная модель, которая определяет некоторые поля и другие модели, унаследованные от нее.И если я определяю форму для этой модели, базовые поля не определены, и я не могу использовать ее в форме.

Если я укажу это в полях, я получу эту ошибку:

Значение исключения: Неизвестные поля (созданы), указанные для реселлера

Местоположение исключения: C:\ Python27 \ lib \ site-packages \ django \ forms \ models.py в new , строка 215

Вот мой код: class BaseModel(models.Model): created_at = models.DateTimeField(default=datetime.now, editable=False) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True</p> <p>class Reseller(BaseModel): name = models.CharField(_("name"), max_length=255, unique=True)</p> <p>class ResellerForm(forms.ModelForm): class Meta: model = Reseller fields = ('name','created_at','updated_at')

UPD

Его ясно воспроизводить с новым пустым проектом с этими тремя классами.Ошибка при импорте формы

 from jjj.forms import ResellerForm
Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Users\ShapeR\PycharmProjects\djt\jjj\forms.py", line 4, in 
    class ResellerForm(forms.ModelForm):
  File "C:\Python27\lib\site-packages\django\forms\models.py", line 214, in __new__
    raise FieldError(message)
FieldError: Unknown field(s) (created_at, updated_at) specified for Reseller

Ответы [ 2 ]

15 голосов
/ 31 марта 2011
created_at = models.DateTimeField(default=datetime.now, editable=False)
updated_at = models.DateTimeField(auto_now=True)

http://docs.djangoproject.com/en/dev/ref/models/fields/#editable

Field.editable

Если False, поле не будет редактироваться вАдминистратор или через формы, автоматически сгенерированные из класса модели.По умолчанию установлено значение True.

также

Примечание

В настоящее время реализовано, установив для auto_now или auto_now_add значение True, поле будет вызыватьсяиметь редактируемый = ложный и пустой = истинный набор.

0 голосов
/ 31 марта 2011

Если ваш отступ совпадает с приведенным выше отрывком, вам может понадобиться правильно вложить , что Meta подкласс внутри BaseModel. В противном случае django попытается выполнить многостоловое наследование - но это все равно должно работать с тем, что вы пытаетесь сделать (если у вас нет нестандартной настройки, например, django-nonrel).

Какой код вызывает это исключение, просто импортируя модуль?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...