Встроенные админки FeinCMS - PullRequest
3 голосов
/ 26 марта 2011

Я новичок в 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 Ответ

2 голосов
/ 26 марта 2011

Если у вас должно быть несколько CollapsiblePanel с на ContentBoxMedia, ваши отношения будут настроены неправильно - вместо ForeignKey должно быть CollapsiblePanel.

Однако, похоже, что вы ищете для автоматической обработки вашего CollapsiblePanel "inline"? Это не будет работать из коробки, потому что FeinCMS обрабатывает все типы контента как сами строки (так что ContentBoxMedia объекты уже обрабатываются как строки родительского объекта), а Django не поддерживает вложенный встраивает .

Я подозреваю, что любой взлом для обеспечения такой функциональности будет ужасно сложным; Вы можете попытаться отобразить свой собственный набор форм в шаблоне ContentBoxMedia, но вам нужно будет взломать метод ItemEditor.change_view для обработки данных, что будет нелегко работать. В качестве альтернативы вы можете избежать этого, приняв Ajax-подход, но он будет работать только внутри сохраненных ContentBoxMedia объектов, а не новых.

В качестве альтернативы вы можете попытаться зарегистрировать ContentBoxMedia непосредственно у администратора, чтобы вы могли использовать CollapsiblePanel inline, но для этого потребуется оставить главную страницу администратора FeinCMS для редактирования по отдельности. Если вы хотите изучить это, вам нужно будет использовать Base.content_type_for и зарегистрировать результирующую модель с вашим AdminSite (и, конечно, явно зарегистрировать встроенное).

...