У меня возникли проблемы с выяснением того, как реализовать wagtail-generi c -переключатель. Моя цель довольно проста. У меня есть много данных, которые не являются иерархическими, поэтому не имеет смысла создавать данные в виде страниц. Wagtail Model Admin - идеальное решение. Однако мне нужно иметь возможность перекрестной ссылки на данные между моделями, и в идеале было бы идеально иметь панель выбора, очень похожую на PageChooserPanel или SnippetChooserPanel, при выборе данных. Однако в трясогузке нет встроенной модели. Я попробовал многие из сторонних приложений, которые пытаются выполнить sh, но они не работают с более новыми версиями трясогузки или с python 3. Наконец-то я наткнулся на wagtail-generi c -переход, и похоже, что идеальное гибкое решение, которое позволит мне создать селектор типа snippetChooserPanel для подключения модели, в котором я нуждаюсь.
К сожалению, я сталкиваюсь с проблемами, которые я выполнил, следуя инструкциям по реализации, изложенным в документации, но мне не ясно, что все такое и как это должно быть заполнено.
https://github.com/wagtail/wagtail-generic-chooser#chooser на основе модели виджетов
У меня есть модель события, ссылающаяся на модель категории события. И модель категории события, и модель события настроены как элементы modelAdmin.
Я установил wagtail-generi c -chooser и добавил его в мои установленные приложения.
Мой код
Categories.widget.py
from django.contrib.admin.utils import quote
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from generic_chooser.widgets import AdminChooser
from categories.models import CategoryEventCollection
class EventChooser(AdminChooser):
choose_one_text = _('Choose a Event')
choose_another_text = _('Choose another Event')
link_to_chosen_text = _('Edit this Event')
model = CategoryEventCollection
#question???
choose_modal_url_name = 'event_chooser:choose'
def get_edit_item_url(self, item):
#question???
return reverse('wagtailsnippets:edit', args=('categories', 'CategoryEventCollection', quote(item.pk)))
Использование в модели событий events.models.py
from django.db import models
from wagtail.admin.edit_handlers import MultiFieldPanel, FieldPanel, PageChooserPanel
from wagtail.core.fields import RichTextField
from wagtail.images.edit_handlers import ImageChooserPanel
from modelcluster.models import ClusterableModel
from categories.widgets import EventChooser
class EventOverview(ClusterableModel):
template = 'events/event_overview_page'
collection = models.ForeignKey(
"categories.CategoryEventCollection",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+"
)
event_title = models.CharField(max_length=120, blank=True, null=True)
event_descriptor = models.TextField(blank=True, null=True)
panels = [
FieldPanel("collection", widget=EventChooser),
FieldPanel("event_title"),
FieldPanel("event_descriptor"),
]
class Meta:
verbose_name = "Event Overview"
verbose_name_plural = "Event Overviews"
В виджете. py-файл, откуда берется значение «choose_modal_url_name»? Я переименовал его из people_chooser, как в приведенном выше примере с документами, в тот, который имел отношение к моему классу, но, похоже, он вызывает ошибку. Нужно ли где-то регистрировать это значение? Нужно ли регистрировать виджет? Или это значение откуда-то указано c. В настоящее время выдает ошибку:
NoReverseMatch в / admin / events / eventoverview / edit / 1 / 'event_chooser' не является зарегистрированным пространством имен
Для этой функции, где я могу получить значения для обратная функция. Я не ссылаюсь на трясогузку, а вместо этого на модель трясогузки, так как мне ссылаться на это? Что я использую в кортеже args?
def get_edit_item_url(self, item):
#question???
return reverse('wagtailsnippets:edit', args=('categories', 'CategoryEventCollection', quote(item.pk)))
Буду очень признателен за любые советы или указания, которые вы можете дать. Или, если вы можете дать мне знать, что мне нужно, чтобы сделать эту модель функциональной панели.