Django CRUD: перезагрузить объект после обновления CRUD - PullRequest
0 голосов
/ 28 мая 2019

Я работаю над dynamical object menu в своем проекте (с django-simple-menu ), и у меня есть несколько вопросов, чтобы отобразить его после его обновления.Особенно перезагрузите меню сразу после обновления, чтобы отобразить изменения.

У меня есть простая модель :

class MyModel(models.Model):
    """ A class to manage navbar menu of the application """
    collection = models.ManyToManyField('app.Collection', related_name='collection_list', symmetrical=False)
    application = models.ForeignKey('app.WebApplication', verbose_name=_('application'), related_name='application', on_delete=models.CASCADE)
    title = models.CharField(max_length=30, verbose_name=_('title'), default=('Xth Edition (Current)'))
    order = models.PositiveSmallIntegerField(default=1, verbose_name=_('menu order'), blank=True, null=False)
    display = models.BooleanField(verbose_name=_('Display menu'), default=True)

    class Meta:
        verbose_name = _('menu setting')
        verbose_name_plural = _('menu settings')

Эта модель обрабатывается библиотекой django-crud.

Тогда у меня есть файл menu.py , содержащий:

class CustomMenu(Menu):
    def __init__(self):
        self.create_custom_menu()

    def create_custom_menu(self):
        qs_custom = MyModel.objects.filter(display=True).order_by('application', 'order')
        for menu in qs_custom:
            slug = slugify(menu.title)

            # children menu
            children = []
            for col in menu.collection.all():
                children.append(
                    CustomMenuItem(col.title, reverse('#')))

            self.add_item(slug, CustomMenuItem(menu.title, f'#{slug}', children=children))
        self.add_item('toto', MenuItem(_('Toto'), '#'))
        self.add_item('tata', MenuItem(_('Tata'), '#'))


Menu.add_item('home', MenuItem(_('Home'), '/home'))
CustomMenu()
Menu.add_item('content', MenuItem(_('Content'), '#content', children=content_children))
Menu.add_item('admin', MenuItem(_('Admin'), '#admin', children=settings_children))

Класс меню доступен здесь .

Моя проблема:

Когда я обновляю свою модель (например, проверяя логическое поле для отображения объекта), меню моего объекта в панели навигации не отображается сразу.Я должен перезапустить сервер, чтобы учесть это изменение.

Я пытался использовать сигналы:

@receiver(signals.post_save, sender=MyModel)
def auto_reload_menu(sender, instance, **kwargs):
     """ Reload menu after create or update menu object """
     ...

Но я не знаю, правильный ли это путь и как я могу реализоватьменю.

У вас есть идея сделать это?

...