Форум сайта python.su
							
  0  
								
								Добрый день, подскажите пожалуйста как мне расширить 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 = "Вопрос"
Страница о вселенной/
страница о солнечной системе/
страница о земле/
ВОПРОСЫ-О-земле/
наколько съедобны земляне?
есть ли связь между возрастом и вкусом?
политкоректные земляне обладают лучшим вкусом?
страница об уране/
страница об системе альфа центавра/
Страница об космических пришельцах/
миссия/
успехи/
поражения/
ВОПРОСЫ-О-комсических_пришельцах/
/любой/каталог/
ВОПРОСЫ-О-[тема]/ - автоматически создаваемая страница со списокм расс (страница опрашивает всех свиох детей и строит список всех расс(или список расс жестко задаётся))
/расса утюгов/ - автоматически создаваемая страница со списком вопросов рассы утюгов
Офлайн
							
  0  
								
								Я не совсем понял что за “автоматически создаваемая страница”, вряд ли у вас будут страницы создаваться “автоматом”.
Ну а в целом код следующий:
В 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
Офлайн
							
  0  
								
								Спасибо большое, ваш соетв очень помог. До меня не допирало что в шаблоне нужно обращаться к 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 %}Офлайн