Наследование модели django и приложение администратора
У меня есть приложение django, в котором я хочу использовать наследование модели. Приложение содержит один класс супер модель Article
и вот его код
class Article(models.Model):
english_title = CharField(max_length=200)
arabic_title = CharField(max_length=200)
english_body = HTMLField()
arabic_body = HTMLField()
enabled = BooleanField()
def __unicode__(self):
return self.english_title
def get_body(self, locale):
if locale == "ar" :
return self.arabic_body
else:
return self.english_body
def get_title(self, locale):
if locale == "ar" :
return self.arabic_title
else:
return self.english_title
и есть дочерний класс под названием History
который расширяет этот класс и вот его код
class History(Article, IHasAttachments):
date = DateField(auto_now_add=True)
Моя проблема возникает в приложении администратора, где dateField (date) в модели History не отображается в форме администратора при вставке новой записи.
ПРИМЕЧАНИЕ: я использую django-tinymce, djnago-filebrowser и django-grappelli
В чем будет проблема?
3 ответа
Я думаю, что проблема в вашей модели истории, которую вы установили auto_now_add=True, что предотвратит отображение поля даты в админке, пожалуйста, проверьте документ django о ссылке на поле модели:
Как в настоящее время реализовано, установка auto_now или auto_now_add в True приведет к тому, что поле будет иметь значение editable=False и blank=True.
А про Field.editable:
Если False, поле не будет отображаться в admin или любой другой ModelForm.
Если вы хотите, чтобы он редактировался, но также имел значение по умолчанию, попробуйте это:
class History(Article, IHasAttachments):
date = DateField(default=datetime.date.today)
Если вы добавите auto_now=True
это поле будет обновляться при каждой модификации. Таким образом, это будет логически нормально, вы не можете редактировать его.
Если вы хотите добавить автоматическую дату при создании экземпляра, я предлагаю вам это:
from django.utils.timezone import now
class History(Article, IHasAttachments):
date = DateField(default=now())
Возможно, проблема наследования, попробуйте с микшированием: