Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

232
Vistas
Múltiples autores para blogpost

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/
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hay un par de opciones que podrías tomar:

  1. ¿Estás seguro de que necesitas usar un modelo de usuario para esto? Si esto solo se usa para adjuntar un nombre/foto/biografía a una publicación de blog, podría ser solo un modelo simple de Django registrado como un fragmento, separado de sus cuentas de usuario.
  2. Puede registrar el modelo de usuario como un fragmento, como sugiere, y esto permitiría que 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).
  3. Hay algunos complementos de terceros para Wagtail que proporcionan un selector para modelos que no son Snippet; consulte wagtailmodelchooser y wagtail-generic-chooser .
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda