Встроенные админки 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).

Другие вопросы по тегам