Как вывести все объекты модели в плагине Django CMS

Создана модель категорий, через models.Model, для того чтобы в админке можно было добавлять записи. сама модель (из models.py):

class KSRentalCategory(models.Model):
    name = models.CharField(max_length=250, default="", verbose_name="Название Категории")
    slug = models.SlugField(max_length=250, default="", verbose_name="URL")
    image = FilerImageField(null=True, blank=True, on_delete=models.CASCADE, related_name="image_ks_rental_category")
    sort = models.IntegerField(default="0", verbose_name="Сортировка")
    is_active = models.BooleanField(default="True", verbose_name="Активно?")
    date_pub = models.DateField(auto_now_add=True, blank=True, verbose_name="Дата добавления")
    date_upd = models.DateTimeField(auto_now_add=False, auto_now=True, verbose_name="Дата редактирования")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'

на frontend надо вывести через плагин список категорий со всеми педалями, создаю плагин (из cms_plugins.py):

@plugin_pool.register_plugin
class KSRentalCategoryPlugin(CMSPluginBase):
    module = _("Аренда")
    name = _("Категории - блок для главной")
    render_template = "ksrental/blocks/rental_category_grid.html"
    model = KSRentalCategory
    allow_children = False

    def render(self, context, instance, placeholder):
        context = super(KSRentalCategoryPlugin, self).render(context, instance, placeholder)
        return context

так не работает, ибо класс модели должен быть не models.Model, а CMSPluginBase! Допустим, как создать дополнительную модель для связки я нашёл:

class KSRentalPLG(CMSPlugin):
    rental = models.ForeignKey(KSRentalCategory, on_delete=models.CASCADE, verbose_name="Аренда", null=True, blank=True)

    def get_title(self):
        return self.rental.name

    def __str__(self):
        return self.get_title()

и в плагине изменить модель с

model = KSRentalCategory

на

model = KSRentalPLG

но в этом случае, плагин предлагает выбрать из списка одну из категорий, а мне необходимо получить все категории. Чтобы потом итерацией пройтись и вывести? Где я пошёл не туда?


Ответы (1 шт):

Автор решения: Master Wenom

В общем сделал так ():

@plugin_pool.register_plugin
class KSRentalCategoryPlugin(CMSPluginBase):
    module = _("Аренда")
    name = _("Категории - блок для главной")
    render_template = "ksrental/blocks/rental_category_grid.html"
    # model = KSRentalPLG
    allow_children = False

    def render(self, context, instance, placeholder):
        category = KSRentalCategory.objects.all()
        context.update({'instance': category})
        return context

Т.е. убрал использование модели, в функции рендера заменил инстанс на все объекты модели. Не знаю, на сколько это правильно, но для меня сработало. Если кто знает правильное решение, хотелось бы увидеть!

→ Ссылка