В настоящее время я экспериментирую с модельными миксинами, идея состоит в том, чтобы создать небольшую библиотеку небольших абстрактных классов mixin, определяющих часто требуемые поля.Django Model Mixins - Fields Ordering
Вот то, что я в настоящее время играет с:
class HtmlAttrsMixin(models.Model):
css_classes = models.CharField(
max_length=256,
verbose_name=_('CSS Classes'),
blank=True,
)
class Meta:
abstract = True
class LinkHtmlAttrsMixin(HtmlAttrsMixin):
target_blank = models.BooleanField(
default=False,
verbose_name=_('Open in a new window /tab'),
)
title = models.CharField(
max_length=512,
verbose_name=_('Title'),
blank=True,
)
class Meta:
abstract = True
class URLMixin(models.Model):
label = models.CharField(
max_length=256,
verbose_name=_('Name'),
blank=True,
)
url = models.CharField(
max_length=4000,
verbose_name=_('URL'),
blank=True,
)
class Meta:
abstract = True
# Concrete model implementing the above mixins:
class TagLine(URLMixin, LinkHtmlAttrsMixin):
enabled = models.BooleanField(_("enabled"), default=True)
def __unicode__(self):
return self.label
Это работает отлично до сих пор, но есть кое-что я не совсем понимаю.
Я хотел бы иметь возможность выбрать порядок унаследованных полей, просто объявив mixins в другом порядке. Насколько я знаю, упорядочение по умолчанию по умолчанию основано на порядке, в котором они были объявлены в классе модели, и python будет разрешать имена атрибутов, пройдя базовые классы в том порядке, в котором они были перечислены, поэтому в приведенном выше Например, я бы ожидать, что css_classes
, target_blank
& title
полей, которые будут перечислены после label
& url
в сайте администратора, и наоборот, если я инвертировать порядок двух Mixins в декларации.
Но независимо от того, как я перечисляю mixins, поля «html_attrs» продолжают отображаться первыми. Они группируются вместе (что кажется логичным, поскольку они принадлежат к одному классу), но я просто не могу заставить заставить упорядочить таким образом.
Я знаю, что это тривиальный вопрос - я могу исправить это с помощью набора полей admin, который в любом случае окажется более гибким. Это просто показалось удобной трюк, которую я ожидал работать, поэтому мне просто интересно понять, почему это не так.
(Кроме того, если у кого-нибудь есть какие-либо советы по модели mixins в целом, я все уши - я нашел некоторую информацию, но не очень, а google для django models mixins
имеет тенденцию возвращать много результатов о CBV mixins, что в настоящее время это не то, что меня интересует).
Спасибо всем, кто захочет ответить!