Estoy un poco atascado tratando de resolver esto
Así que tengo una aplicación web y decidí agregar una sección de blog usando wagtail. Esto significa que ya tengo bastantes páginas y modelos preexistentes que no quiero tocar, así como algunos usuarios ya. Conozco el campo de owner en la clase de Page base, pero no puedo ver una forma de extenderlo a un campo m2m.
Para lograr esto, he creado un modelo de usuario personalizado en users.User . Para propósitos de la comunidad de blogs, quería agregar la opción de crear un avatar y configurar una biografía, así que agregué esos dos (avatar y biografía son campos agregados recientemente)
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)Luego tengo una página de publicación de blog clásica, con título, campo de transmisión del cuerpo, etc. Sin embargo, estoy tratando de reemplazar algo donde puede agregar varios editores de publicaciones, y cada uno de ellos tiene derechos de edición. Así que probé algo como esto:
Primero un ordenable ya que necesito many2many:
class PostAuthorsOrderable(Orderable): page = ParentalKey("blog.BlogPost", related_name="post_authors") author = models.ForeignKey("users.User",on_delete=models.CASCADE) panels = [ SnippetChooserPanel("author"), ]Y luego en la propia página de 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!)" ), ... ]Sin embargo, esto no funciona, ¿alguna idea sobre cómo lograrlo? Obtengo el formulario adecuado en el administrador de wagtail, pero aparece un error. Intenta hacer una devolución de llamada, presumiblemente para encontrar una lista de todos los posibles usuarios para seleccionar, pero da un 404, presumiblemente porque el usuario no está registrado como fragmento.
Antes de intentar registrar al usuario como un fragmento, quería obtener una segunda opinión aquí, porque de alguna manera se siente un poco mal.
PD: puntos de bonificación si también puede decirme cómo puedo obtener un widget en el editor para seleccionar autores autocompletando sus nombres en un campo de texto, un poco como este: ejemplo
EDITAR: cuando hago clic en el botón para agregar un autor, no sucede nada, todo lo que puedo ver es un 404 en la consola
172.19.0.1 - - [17/Nov/2021 15:26:09] "GET /admin/snippets/choose/users/user/ HTTP/1.1" 404 - Not Found: /admin/snippets/choose/users/user/Hay un par de opciones que podrías tomar:
SnippetChooserPanel funcione; el único efecto secundario negativo es que agregaría una vista de 'edición' para los usuarios en el menú Fragmentos que probablemente no estaría completamente funcional debido a la lógica personalizada que existe en los modelos de usuario (por ejemplo, lo más probable es que ofrezca un campo de contraseña cifrada en lugar de uno utilizable por humanos). Puede ignorar esto con seguridad (y no se mostrará a los que no sean superusuarios a menos que les dé permiso explícitamente en Configuración -> Grupos).