Django CMS - Как добавить несколько (ноль или более) ссылок на модель в админке - PullRequest
0 голосов
/ 04 декабря 2018

Я довольно новичок в Django CMS и унаследовал веб-сайт со следующими характеристиками:

  • Django 1.10.8
  • Django CMS 3.4.5
  • Python 2.7

К сожалению, на данный момент нет возможности для обновления.Кроме того, прошу прощения, если я неправильно использую терминологию - я буду признателен за исправления.

У меня есть приложение для персонала с моделями для Staff и StaffTranslation (и т. Д.), И у меня есть задача обновить администратораразрешить добавление одной или нескольких ссылок к каждому StaffTranslation.Однако у меня возникли проблемы с определением наилучшего способа сделать это и какие компоненты использовать.

Я определил плагин djangocms-link , который может быть возможным, но яне могу найти инструкции о том, как добавить несколько экземпляров на страницу модели или администратора.Кроме того, последняя версия требует Django 1.11, как минимум.

Я также нашел PageSmartLinkField - который выглядит умным - но я не смог найти, как интегрировать его с даннымидля объекта StaffTranslation или как его отобразить на странице администратора для этого объекта.

Буду признателен за любые предложения о том, как структурировать это - это кажется достаточно простой задачей, я думаю, что я простоотсутствует часть или две головоломки.

Конечная цель состоит в том, чтобы иметь нулевое или много ссылок на StaffTranslation (который имеет свою собственную страницу администратора), с возможностью добавить хотя бы URLи ссылку на текст каждого из них.Было бы разумно, если бы был некоторый помощник по пользовательскому интерфейсу, позволяющий легко выбирать внутренние ссылки, но текстовое поле было бы в порядке.

РЕДАКТИРОВАТЬ: модель StaffTranslation

class StaffTranslation(TimeStampedModel):
    staff = models.ForeignKey(Staff, related_name='translations')
    language = models.ForeignKey(Language)

    specialist_work_title = HTMLField(max_length=128, null=True, blank=True)  # SpecialistWorkTitle
    description = HTMLField(null=True, blank=True)  # PersonText                                                                                                                                                                                                                                                                                                                                                
    experience = HTMLField(null=True, blank=True)  # Experience

    phone_office = models.CharField(max_length=128, null=True, blank=True)  # OfficePhone
    phone_cell = models.CharField(max_length=128, null=True, blank=True)  # CellPhone

    mentions = HTMLField(null=True, blank=True)  # Mentions
    education = HTMLField(null=True, blank=True)  # Education

    other_qualifications = HTMLField(null=True, blank=True)  # OtherQualifications

    meta_title = models.TextField(null=True, blank=True)  # MetaTitle
    meta_keywords = models.TextField(null=True, blank=True)  # MetaKeywords
    meta_description = models.TextField(null=True, blank=True)  # MetaDescription

    legacy_data = models.TextField(null=True, blank=True)

    objects = querysets.StaffTranslationQuerySet.as_manager()

    # I would like to add something here like links = models.ForeignKey(Link, related_name='links') - so should I make a Link model and add as a many to many relation, and how do I integrate that into the admin?

Я пропустил функции, определенные в модели.

Опять же, было бы неплохо обновить, но это произойдет не раньше лета, и эту задачу нужно решить сейчас.:)

1 Ответ

0 голосов
/ 05 декабря 2018

Я думаю, что решение для вас будет заполнить поле, так что вы можете добавить плагины CMS, как и любой другой плагин, для каждого экземпляра этой модели.Например;

from cms.models.fields import PlaceholderField


class StaffTranslation(TimeStampedModel):
    ...
    content = PlaceholderField(
        'staff_translation'
    )

Затем в шаблоне подробного просмотра вы делаете {% render_placeholder object.content %}, и он будет отображать заполнитель для этого объекта, как для заполнителей в любом стандартном шаблоне страницы.

Очевидно, что затем вы можете добавить любые плагины CMS, ссылки или что-то другое, и они будут отображаться вместе с другими атрибутами в вашем экземпляре StaffTranslation.

Документы по этому вопросу приведены здесь;http://docs.django -cms.org / ен / последний / how_to / placeholders.html

...