Форум сайта python.su
Добрый день, подскажите пожалуйста как мне расширить django cms.
Опишу то, в чём нуждаюсь(на примере вопросов и ответов):
Я написал свою модель - вопрос
class QuestionAnswer(models.Model):
RACE_CHOICES = (
('duck killer', 'Утка убийца'),
('wise tomato', 'Разумный помидор'),
)
#id = models.AutoField(primary_key=True)
question = models.TextField(verbose_name="Вопрос")
answer = models.TextField(verbose_name="Ответ")
date = models.DateField(default=datetime.datetime.now, verbose_name="Дата")
published = models.BooleanField(default=False)
race = models.CharField(choices=RACE_CHOICES, verbose_name="Раса")
name = models.CharField(max_length=150, verbose_name="Имя спршивающего")
class Meta:
verbose_name_plural = "Вопросы и Ответы"
verbose_name = "Вопрос"
Страница о вселенной/
страница о солнечной системе/
страница о земле/
ВОПРОСЫ-О-земле/
наколько съедобны земляне?
есть ли связь между возрастом и вкусом?
политкоректные земляне обладают лучшим вкусом?
страница об уране/
страница об системе альфа центавра/
Страница об космических пришельцах/
миссия/
успехи/
поражения/
ВОПРОСЫ-О-комсических_пришельцах/
/любой/каталог/
ВОПРОСЫ-О-[тема]/ - автоматически создаваемая страница со списокм расс (страница опрашивает всех свиох детей и строит список всех расс(или список расс жестко задаётся))
/расса утюгов/ - автоматически создаваемая страница со списком вопросов рассы утюгов
Офлайн
Я не совсем понял что за “автоматически создаваемая страница”, вряд ли у вас будут страницы создаваться “автоматом”.
Ну а в целом код следующий:
В models.py добавляете:
from cms.models import CMSPlugin
class QuestionAnswerPlugin(CMSPlugin):
quan = models.ManyToManyField(Employee, related_name='plugins') или quan = models.ForeignField(QuestionAnswer, related_name='plugins')
def __unicode__(self):
return self.quan.question
В этой же директории создаете файл cms_plugins.py:
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from имя_текущей_директории.models import QuestionAnswerPlugin
class QuestionAnswerPlugin(CMSPluginBase):
model = QuestionAnswerPlugin #Это выше-импортированный класс, а не текущий.
name = u“Вопросы-ответы” #Как будет выводится название плагина в django-cms
render_template = “QuestionAnswer.html” #Шаблон…
def render(self, context, instance, placeholder):
context.update({'placeholder':placeholder, ‘instance’:instance}) #Какие переменные будут передаваться шаблону.
return context
Делаете syncdb и наслаждаетесь django-cms.
Еще надо читать это: http://django-cms.readthedocs.org/en/2.1.0.rc3/index.html
Офлайн
Спасибо большое, ваш соетв очень помог. До меня не допирало что в шаблоне нужно обращаться к instance.poll.question и к instance.poll.choice_set.all а не как в документации
Подскажите пожалуйста, как мне получить на странице выше уровнем свойства плагина прикрепленного ниже уровнем.
Вот что мне нужно:
у меня есть страница 1 и у неё есть потомки - страницы к которыми способом как вы описали прикреплены объект 1, объект 2
что мне писать в шаблоне страницы 1 чтобы получить на ней таблицу:
|ссылка на странцу с объект1| объект1.свойство1|объект1.свойство2|
|ссылка на странцу с объект2| объект2.свойство1|объект2.свойство2|
Мне в шаблоне страницы 1 писать что-то типа
{% for page in self.children.all %}
<tr>
<td>page.url</td>
<td>page.pluginobject.svoystvo1</td>
<td>page.pluginobject.svoystvo2</td>
</tr>
{% endfor %}
Офлайн