Я пытаюсь использовать псевдокласс CSS3: not, как определено в спецификации. Согласно спецификации :
Псевдокласс отрицания,: not (X), является функциональная нотация, использующая простую селектор (исключая отрицание сам псевдокласс) в качестве аргумента. Он представляет собой элемент, который не m пытается создать систему для управления различными типами контента на странице. Например, страница может содержать текстовое содержимое, содержимое гиперссылки, видеоконтент и т. Д. В моем коде моделирования у меня есть ...
Я пытаюсь создать систему для управления различными типами контента на странице. Например, страница может содержать текстовое содержимое, содержимое гиперссылки, видеоконтент и т. Д.
В моем коде моделирования у меня есть базовый класс:
class ContentItem(models.Model): title = models.CharField(max_length=1000) page_order = models.IntegerField() last_update_date = models.DateTimeField(default=datetime.now()) class Meta: abstract = True ordering = ['page_order', 'last_update_date', 'title']
Это базовый класс для всех элементов контента. Порядок страниц определяет его позицию на странице, например, элемент с page_order = 0 должен быть вверху страницы. Затем я определяю несколько конкретных моделей контента, которые наследуются от этой.
class LinkContent(ContentItem): url = models.URLField() link_text = models.CharField(max_lenth=1000) class TextContent(ContentItem): text = models.CharField() class VideoContent(ContentItem): title = models.CharField() video_file = models.FieldField(upload_to = 'videos')
Таких типов контента может быть гораздо больше. Затем я бы определил модель страницы, которая состоит из всех различных типов контента. Идеально, Я мог бы связать все типы в зависимости от базового типа. Таким образом, в этом отношении у вас будет смесь LinkContents, TextContents и VideoContents. Они будут отсортированы по page_order, чтобы определить их порядок на странице при рендеринге шаблона.
class Page(models.Model): contents = models.ManyToManyField(ContentItem) title = models.CharField()
Есть ли способ заставить такую схему работать? Или проблематично иметь одно отношение к разным типам моделей? Я знаю, что это хорошее решение с точки зрения объектно-ориентированного программирования, в основном использующее полиморфизм в моих интересах, но я не уверен, что это имеет смысл на уровне базы данных.
Мне нужно что-то еще вроде этого:
class Page(models.Model): video_contents = models.ManyToManyField(VideoContent) link_contents = models.ManyToManyField(LinkContent) text_contents = models.ManyToManyField(TextContent) title = models.CharField()
I знаю, что это сработает, но моя схема определения размещения объектов на странице становится более сложной. Мне нужно было бы пройти все отношения контента, отсортировать их по page_order и затем отобразить их.
Я думаю, что в обоих случаях я хочу объявить метод render () в базовом классе, который может наследовать каждый конкретный тип контента. Таким образом, если у меня есть список ContentItems, я могу использовать утиную печать для их рендеринга, не беспокоясь об их конкретном типе.
Мой последний вопрос: как мне с этим сделать удобное место администратора? Как мне упростить просмотр всех ContentItems, составляющих страницу, в одном представлении, чтобы их можно было легко перемещать, изменяя page_order?
Спасибо, что прочитали это, дайте мне знать, если вам нужна дополнительная информация .