Я работаю над своим первым настоящим проектом Django после многих лет программирования PHP, и у меня возникает проблема с моими моделями. Во-первых, я заметил, что я был копирования и вставки кода между моделями, и, будучи прилежным OO программист, я решил сделать родительский класс, другие модели могут унаследовать от:Помогите новичкам Python с проблемой наследования модели Django
class Common(model.Model):
name = models.CharField(max_length=255)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.name
class Meta:
abstract=True
До сих пор так хорошо. Теперь все мои другие модели расширяют «Common» и имеют имена и даты, как я хочу. Тем не менее, у меня есть класс для «Категории», это имя должно быть уникальным. Я предполагаю, что для меня должен быть относительно простой способ получить доступ к атрибуту name из Common и сделать его уникальным. Тем не менее, различные методы, которые я пытался использовать, все провалились. Например:
class Category(Common):
def __init__(self, *args, **kwargs):
self.name.unique=True
Вызывает страницу администратора Django плюнуть на ошибку «Caught исключение при визуализации:„Категория“объект не имеет„имя“атрибут
Может кто-то мне точку в правильном направлении?
Я немного потрясен, увидев, что в документах ... это кажется довольно большим упущением! – Joshmaker
Ну, модель наследования полностью отсутствовала из Django в течение некоторого времени, поэтому я думаю, что это большое улучшение. Я не совсем уверен, но я думаю, что вы могли бы реализовать свой уникальный = true в пользовательском менеджере. Или вы можете использовать множественное наследование и иметь UNIQUE_NAME как mixin. – gomad