es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples autores para entrada de blog

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 varias páginas y modelos preexistentes que no quiero modificar, así como algunos usuarios ya existentes. Soy consciente del campo propietario en la clase de página 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 fines de la comunidad de blogs, quería agregar la opción de elegir un avatar y establecer una biografía, así que agregué esos dos campos nuevos (avatar y bio)

class User(AbstractUser):
name = models.CharField(_(“Nombre de usuario que se muestra a otros usuarios”), 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 clásica de Blogpost, con título, cuerpo de streamfield, etc. Sin embargo, estoy tratando de reemplazar algo en lo que pueda agregar varios editores de publicaciones, y cada uno de ellos tenga derechos de edición. Entonces intenté algo como esto:

Primero, una clase Orderable, ya que necesito muchos a muchos:

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=”Autor”, min_num=1, max_num=4)
],
heading=”Autores (¡no olvides agregarte!)”
),

]

Sin embargo, esto no está funcionando, ¿alguna idea de cómo lograr esto? Obtengo el formulario correcto en el administrador de Wagtail, pero recibo un error. Intenta hacer una devolución de llamada, presumiblemente para encontrar una lista de todos los posibles usuarios para seleccionar, pero devuelve un 404, presumiblemente porque el usuario no está registrado como un fragmento.

Antes de intentar registrar al usuario como un fragmento, quería obtener una segunda opinión aquí, porque eso se siente un poco mal de alguna manera.

PD: puntos adicionales si también puedes decirme cómo puedo obtener un widget en el editor para simplemente seleccionar autores autocompletando sus nombres en un campo de texto, un poco como esto: ejemplo

EDITAR: Cuando hago clic en el botón para agregar un autor, no sucede nada, todo lo que puedo ver es un error 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/

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que el modelo de usuario no está registrado como un fragmento, por lo que el callback no está funcionando.

    Para registrar el modelo de usuario como un fragmento, puede utilizar el método “register_snippet” del módulo “wagtail.snippets”.

    Por ejemplo, puede agregar el siguiente código a su archivo “models.py”:

    from wagtail.snippets.models import register_snippet
    
    @register_snippet
    class User(AbstractUser):
        name = models.CharField(_("Nombre del usuario que se muestra a otros usuarios"), 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)
    

    Esto debe registrar el modelo de usuario como un fragmento y permitirle seleccionar autores desde el admin.

    Para obtener puntos adicionales, puede utilizar el plugin “jQuery MagicSearch” para crear un widget de autocompletado para seleccionar autores.

Comments are closed.