Несколько авторов для записи в блоге

Я немного застрял в попытке решить эту проблему

Итак, у меня есть webapp, и я решил добавить раздел блога, используя wagtail. Это означает, что у меня уже есть довольно много страниц и моделей, которые я не хочу трогать, а также несколько пользователей. Я знаю о поле owner в базовом классе Page, но не вижу способа расширить его до m2m-поля.

Для этого я создал пользовательскую модель пользователя по адресу users.User. Для целей сообщества блога я хотел добавить возможность выбора аватара и биографии, поэтому я добавил эти два поля (аватар и биография - это новые поля)

class User(AbstractUser):
    name = models.CharField(_("Name of User as displayed to other users"), blank=True, max_length=255)
    company = models.ForeignKey(Company, null=True, on_delete=models.CASCADE)
    job_title = models.CharField(max_length=100)
    avatar = models.ForeignKey('wagtailimages.Image', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
    bio = models.TextField(max_length=300, blank=True)

Тогда у меня есть классическая страница Blogpost, с заголовком, полем потока body и т.д.... Однако я пытаюсь заменить что-то, где вы можете добавить несколько редакторов постов, и каждый из них имеет права на редактирование. Поэтому я попробовал что-то вроде этого:

Сначала заказываемый, так как мне нужно many2many:

class PostAuthorsOrderable(Orderable):
    page = ParentalKey("blog.BlogPost", related_name="post_authors")
    author = models.ForeignKey("users.User",on_delete=models.CASCADE)

    panels = [
       SnippetChooserPanel("author"),
    ]

А затем на самой странице BlogPost:

class BlogPost(Page):
    ...
    content_panels = Page.content_panels + [
        MultiFieldPanel(
            [
                InlinePanel("post_authors", label="Author", min_num=1, max_num=4)
            ],
            heading="Authors (don't forget to add yourself!)"
        ),
        ...
    ]

Однако это не работает, есть идеи, как этого добиться? Я получаю правильную форму в админке трясогузки, но получаю ошибку. Он пытается сделать обратный вызов, предположительно, чтобы найти список всех возможных пользователей для выбора, но он выдает 404, предположительно, потому что пользователь не зарегистрирован в качестве сниппета.

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

PS: бонусные очки, если вы также скажете мне, как я могу получить виджет в редакторе для простого выбора авторов путем автозаполнения их имен в текстовом поле, примерно так: example

Есть несколько вариантов, которые вы могли бы предпринять:

  1. Вы уверены, что вам нужно использовать модель User для этого? Если это просто используется для прикрепления имени / фотографии / биографии к записи в блоге, это может быть обычная модель Django, зарегистрированная как сниппет, отдельно от ваших учетных записей пользователей.
  2. .
  3. Вы можете зарегистрировать модель пользователя как сниппет, как вы предлагаете, и это позволит SnippetChooserPanel работать - единственным негативным побочным эффектом будет то, что это добавит представление 'edit' для пользователей в меню Snippets, которое, вероятно, не будет полностью функциональным из-за пользовательской логики, существующей в моделях пользователей (например, оно, скорее всего, предложит зашифрованное поле пароля, а не поле, пригодное для использования человеком). Вы можете спокойно игнорировать это (и оно не будет показано не-суперпользователям, если вы явно не дадите им разрешение на это в разделе Настройки -> Группы).
  4. .
  5. Для Wagtail есть несколько сторонних дополнений, которые предоставляют выбор для моделей, не относящихся к сниппетам - см. wagtailmodelchooser и wagtail-generic-chooser.
Вернуться на верх