Встроенные админки FeinCMS
Я новичок в FeinCMS и пытаюсь создать свой собственный тип контента. Это использует другой пользовательский тип контента, который я создал.
В приведенном ниже коде "CollapsiblePanel" не отображается в админке, так как я только хочу, чтобы вы могли создавать "CollapsiblePanels" из раздела ContentBox.
Вы также можете создать несколько CollapsiblePanels для каждого ContentBox. У меня проблемы с выяснением, как соединить это вместе, чтобы администратор позволил вам добавить CollapsiblePanels внутри ContentBox
class CollapsiblePanel(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
def render(self, **kwargs):
return render_to_string('collapsiblepanel.django.html', {
'media': self,
'title': mark_safe(self.title),
'text': mark_safe(self.content),
})
class ContentBoxMedia(RichTextContent):
title = models.CharField(_('title'), max_length=200, blank=True)
collapsible = models.BooleanField()
collapsiblePanels = models.ForeignKey(CollapsiblePanel)
class Meta:
abstract = True
verbose_name = 'Content Box'
verbose_name_plural = 'Content Box'
def render(self, **kwargs):
return render_to_string('contentbox.django.html', {
'media': self,
'title': mark_safe(self.title),
'text': mark_safe(self.text),
})
1 ответ
Если вы должны иметь возможность иметь несколько CollapsiblePanel
с за ContentBoxMedia
Ваши отношения настроены неправильно - ForeignKey
должен быть в CollapsiblePanel
вместо.
Однако, похоже, что вы ищете для автоматизированной обработки вашего CollapsiblePanel
"в соответствии"? Это не будет работать из коробки, потому что FeinCMS обрабатывает все типы контента как встроенные (так ContentBoxMedia
объекты уже обрабатываются как inline родительского объекта), и Django не поддерживает вложенные inline.
Я подозреваю, что любой взлом, чтобы обеспечить такую функциональность, был бы ужасно сложным; Вы можете попробовать сделать свой собственный набор форм в ContentBoxMedia
шаблон, но вам нужно будет взломать ItemEditor.change_view
метод для обработки данных, который не будет работать легко. В качестве альтернативы вы можете избежать этого, приняв Ajax-подход, но это будет работать только внутри сохраненного ContentBoxMedia
объекты, а не новые.
В качестве альтернативы вы можете попробовать зарегистрироваться ContentBoxMedia
с администратором напрямую, чтобы вы могли использовать CollapsiblePanel
inlines, но для этого потребуется оставить главную страницу администратора FeinCMS, чтобы редактировать их отдельно. Если вы хотите изучить это, вам нужно будет использовать Base.content_type_for
и зарегистрируйте полученную модель в своем AdminSite
(и, конечно, явно зарегистрировать inline).