Несколько авторов для записи в блоге
Я немного застрял в попытке решить эту проблему
Итак, у меня есть 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
Есть несколько вариантов, которые вы могли бы предпринять:
- Вы уверены, что вам нужно использовать модель User для этого? Если это просто используется для прикрепления имени / фотографии / биографии к записи в блоге, это может быть обычная модель Django, зарегистрированная как сниппет, отдельно от ваших учетных записей пользователей. .
- Вы можете зарегистрировать модель пользователя как сниппет, как вы предлагаете, и это позволит
SnippetChooserPanel
работать - единственным негативным побочным эффектом будет то, что это добавит представление 'edit' для пользователей в меню Snippets, которое, вероятно, не будет полностью функциональным из-за пользовательской логики, существующей в моделях пользователей (например, оно, скорее всего, предложит зашифрованное поле пароля, а не поле, пригодное для использования человеком). Вы можете спокойно игнорировать это (и оно не будет показано не-суперпользователям, если вы явно не дадите им разрешение на это в разделе Настройки -> Группы). .
- Для Wagtail есть несколько сторонних дополнений, которые предоставляют выбор для моделей, не относящихся к сниппетам - см. wagtailmodelchooser и wagtail-generic-chooser.