Introduction
En Odoo, los modelos definen cómo se estructura y almacena la información en la base de datos. Cada pieza de datos empresariales con la que trabaja reside en un modelo.
Los modelos de Odoo son la base de la arquitectura de datos. Definen los campos de Odoo, las relaciones y la lógica empresarial. Comprender cómo funcionan los modelos es esencial tanto para desarrolladores como para consultores funcionales.
Este artículo se centra en el modelo blog.post. Este modelo impulsa la funcionalidad del blog en los sitios web de Odoo. Ya sea que esté creando contenido a través de la interfaz de usuario, automatizando publicaciones a través de la API o personalizando la experiencia del blog, trabajará con este modelo.
What is the blog.post Model
El modelo blog.post representa un solo artículo de blog en Odoo. Cada registro es una publicación que aparece en el blog de su sitio web.
Este modelo en Odoo es parte del módulo website_blog. Funciona junto con blog.blog (el contenedor del blog) y blog.tag (para la categorización). Cuando crea o edita un artículo de blog en Odoo, está creando o actualizando un registro blog.post.
El modelo hereda de varios mixins. Utiliza el mixin mail.thread para el chatter y los seguidores. Utiliza el mixin website.published para la lógica de publicación y despublicación. Comprender esta herencia de modelos en Odoo ayuda al extender el modelo.
blog.post no es un modelo abstracto o transitorio de Odoo. Es un modelo almacenado regular. Todas las publicaciones se persisten en la base de datos y se pueden consultar a través de la API.
Key Fields in the Model
Aquí están los campos más importantes de Odoo en el modelo blog.post. Comprender estos ayudará a trabajar de manera efectiva con el contenido del blog.
1. name
Tipo: Char. Este campo almacena el título de la publicación del blog. Es obligatorio y se muestra en listas, formularios y en el sitio web. El nombre aparece en la pestaña del navegador y en los resultados de búsqueda.
2. blog_id
Tipo: Many2one (blog.blog). Vincula la publicación a su contenedor de blog. Cada blog.post pertenece exactamente a un blog. Utilice esto para organizar publicaciones en diferentes secciones del blog (por ejemplo, Noticias, Actualizaciones de Productos, Guías Técnicas).
3. subtitle
Tipo: Char. Un subtítulo o lema corto. Se muestra debajo del título en la página de la publicación y a veces en las listas de blogs. Útil para SEO y legibilidad.
4. content
Tipo: Html. El cuerpo principal del artículo. Almacena contenido HTML enriquecido que incluye texto, imágenes y fragmentos del sitio web de Odoo. Este es el campo de contenido principal.
5. teaser
Tipo: Texto. Teaser generado automáticamente a partir del contenido. Odoo extrae una vista previa para mostrar en las listas de blogs. Solo lectura y calculado.
6. teaser_manual
Tipo: Texto. Anulación manual del teaser. Cuando se establece, esto reemplaza el teaser generado automáticamente en las listas de blogs. Úselo para resúmenes personalizados que difieran del párrafo de apertura.
7. author_id
Tipo: Many2one (res.partner). El autor de la publicación. Se vincula a un contacto o usuario. Se muestra en la publicación y en las listas. Útil para blogs con múltiples autores.
8. author_name
Tipo: Char. Nombre de visualización calculado del autor. Se utiliza el nombre de visualización del autor cuando se establece author_id. Solo lectura.
9. author_avatar
Tipo: Binario. Imagen del avatar del autor. Se muestra junto al nombre del autor en la publicación. Opcional.
10. is_published
Tipo: Booleano. Si la publicación está publicada y visible en el sitio web. Campo computado de solo lectura. Usa website_published para cambiar esto.
11. website_published
Tipo: Booleano. El campo escribible para publicar o despublicar. Establecer en True para hacer que la publicación esté activa. Establecer en False para borrador. Esto impulsa is_published.
12. post_date
Tipo: Fecha y hora. La fecha de publicación mostrada a los visitantes. Utilizada para ordenar y mostrar. Puede establecerse en el futuro para publicaciones programadas.
13. published_date
Tipo: Fecha y hora. La fecha real en que se publicó la publicación. Se establece automáticamente cuando website_published se convierte en True. Útil para análisis.
14. active
Tipo: Booleano. Indicador de eliminación suave. Cuando es False, el registro está archivado y oculto de las vistas predeterminadas. Las publicaciones no se eliminan físicamente para preservar la historia.
15. tag_ids
Tipo: Muchos a muchos (blog.tag). Etiquetas para categorización. Utilizadas para filtrar y agrupar publicaciones. Las etiquetas pueden tener categorías para organización jerárquica.
16. visits
Tipo: Entero. Contador de visitas. Solo lectura. Se incrementa cuando los visitantes ven la publicación. Se utiliza para análisis y contenido popular.
17. website_url
Tipo: Carácter. Ruta completa de la URL a la publicación en el sitio web. Solo lectura. Formato: /blog/{blog-seo-name}-{blog-id}/{post-seo-name}-{post-id}.
18. cover_properties
Tipo: Texto. Cadena JSON que almacena propiedades de la imagen de portada. Controla la posición, superposición y visualización de la imagen de portada del blog. Utilizado por el frontend.
19. header_visible
Tipo: Booleano. Si se debe mostrar el encabezado del sitio web en la página de la publicación. Útil para publicaciones de ancho completo o incrustadas.
20. footer_visible
Tipo: Booleano. Si se debe mostrar el pie de página del sitio web en la página de la publicación. A menudo se empareja con header_visible.
21. seo_name
Tipo: Carácter. Slug de URL amigable para SEO. Determina la ruta de la URL. Ejemplo: my-post-title se convierte en /blog/my-blog-1/my-post-title-1. Se genera automáticamente a partir del nombre si está vacío.
22. website_meta_title
Tipo: Char. Título meta para motores de búsqueda. Se muestra en la pestaña del navegador y en los resultados de búsqueda. Importante para SEO.
23. website_meta_description
Tipo: Texto. Descripción meta para motores de búsqueda. Se muestra en los fragmentos de búsqueda. Mantener entre 150-160 caracteres para una mejor visualización.
24. website_meta_keywords
Tipo: Char. Palabras clave meta. Menos importantes para SEO hoy en día, pero aún utilizadas por algunos sistemas.
25. create_date
Tipo: Datetime. Almacena la fecha en que se creó el registro. Gestionado automáticamente por Odoo. Útil para informes y auditorías.
26. create_uid
Tipo: Many2one (res.users). Usuario que creó el registro. Establecido automáticamente. Solo lectura.
27. write_date
Tipo: Datetime. Fecha de la última modificación. Gestionado automáticamente. Ayuda a rastrear cuándo se actualizó por última vez el contenido.
28. write_uid
Tipo: Many2one (res.users). Usuario que modificó el registro por última vez. Solo lectura.
29. display_name
Tipo: Char. Nombre de visualización calculado. Utilizado en menús desplegables many2one y resultados de búsqueda. Solo lectura.
30. website_id
Tipo: Many2one (website). En configuraciones de múltiples sitios web, el sitio web al que pertenece esta publicación. Opcional; cuando está vacío, la publicación puede aparecer en todos los sitios web.
Cómo se utiliza este modelo en los flujos de trabajo empresariales
1. Marketing de Contenidos y SEO
Los equipos de marketing crean registros blog.post para publicar artículos. Utilizan website_meta_title, website_meta_description y seo_name para optimizar para la búsqueda. El campo de contenido contiene el artículo completo. Las etiquetas ayudan a organizar el contenido por tema.
2. Sitios Web de Múltiples Blogs
Las empresas gestionan múltiples blogs (Noticias, Actualizaciones de Productos, Documentos Técnicos). Cada blog.blog tiene muchos registros blog.post. El campo blog_id vincula cada publicación a su categoría. Los visitantes navegan por blog y filtran por etiqueta.
3. Contenido Impulsado por API
Las integraciones crean registros blog.post a través de XML-RPC o JSON-RPC. Los casos de uso incluyen la importación desde un CMS, la sincronización desde un blog sin cabeza, o la automatización de la creación de publicaciones desde sistemas internos. El modelo API en Odoo expone blog.post para crear, leer, actualizar y buscar.
4. Publicación Programada
Establezca post_date en una fecha futura y website_published en Verdadero. Odoo muestra la publicación cuando se alcanza la fecha. Útil para calendarios de contenido y campañas programadas.
5. Múltiples Autores y Colaboración
El campo author_id y el mixin mail.thread admiten la colaboración. Los autores se asignan por publicación. Los seguidores reciben notificaciones de cambios. Chatter permite comentarios internos antes de la publicación.
Cómo los desarrolladores amplían este modelo
Los desarrolladores extienden blog.post utilizando varios patrones. La herencia de modelos de Odoo es el principal mecanismo.
Herencia de Modelos
Utilice _inherit = 'blog.post' para extender el modelo. Agregue nuevos campos de Odoo, sobrescriba métodos o agregue restricciones. El modelo heredado en Odoo mantiene sus cambios en un módulo separado para facilitar las actualizaciones. blog.post hereda de mail.thread y website.published.mixin; comprenda estos al sobrescribir.
Agregar Campos
Defina nuevos campos de Odoo en su modelo heredado. Utilice el tipo de campo correcto: Char, Many2one, Boolean, Integer, Text, Selection. Para metadatos personalizados (tiempo de lectura, categorías personalizadas), agregue campos y expóngalos en las vistas. Utilice el prefijo x_ para campos personalizados para evitar conflictos.
Extensiones de Python
Sobrescriba create, write o unlink para agregar lógica. Utilice super() para llamar al original. Tenga cuidado con website_published y post_date. El modelo tiene campos computados del mixin de sitio web. Sobrescriba _compute_website_url si necesita lógica de URL personalizada.
Odoo Studio
Odoo Studio le permite agregar campos sin código. Bueno para personalizaciones rápidas como metadatos adicionales. Para lógica compleja, integraciones de API o vistas personalizadas, los módulos personalizados son más mantenibles. El modelo de API en Odoo (blog.post) está completamente expuesto a través de XML-RPC y JSON-RPC.
Mejores prácticas
- Establezca website_meta_title y website_meta_description para cada publicación. Mejoran la visibilidad SEO.
- Utilice teaser_manual para listados de blogs cuando el teaser generado automáticamente no se ajuste. Los teasers personalizados suelen tener un mejor rendimiento.
- Establezca seo_name explícitamente para publicaciones importantes. Evite caracteres especiales que puedan romper URLs.
- Al construir integraciones de API, utilice website_published para publicar. No confíe en is_published para escrituras.
- Utilice tag_ids para una categorización consistente. Cree etiquetas por adelantado y reutilícelas en las publicaciones.
Errores Comunes
- Escribir en is_published en lugar de website_published. is_published es de solo lectura. Siempre utilice website_published para publicar o despublicar.
- Olvidar establecer blog_id. Es obligatorio. Las publicaciones sin un blog no se mostrarán correctamente.
- Dejar website_meta_description vacío. Los motores de búsqueda pueden usar contenido aleatorio de la página. Siempre proporcione una descripción clara de 150-160 caracteres.
- Sobrescribir métodos centrales sin llamar a super(). Esto puede romper el comportamiento del mixin del sitio web o de mail.thread.
- Crear valores seo_name duplicados dentro del mismo blog. Las URLs pueden entrar en conflicto. Deje que Odoo los genere automáticamente o asegúrese de que sean únicos.
Conclusión
El modelo blog.post es central para el blog del sitio web de Odoo. Almacena cada artículo, su contenido, metadatos y estado de publicación. Comprender sus campos de Odoo y cómo se relaciona con blog.blog y blog.tag le ayudará a configurar, personalizar e integrar el contenido del blog de manera efectiva.
Ya sea que sea un consultor funcional que gestiona contenido o un desarrollador que construye integraciones de API, un sólido conocimiento de blog.post le ahorrará tiempo y evitará errores.
¿Necesita ayuda con su implementación de Odoo?
Dasolo ayuda a las empresas a implementar, personalizar y optimizar Odoo. Nos especializamos en integraciones de API y desarrollo de Odoo. Nuestro equipo tiene una profunda experiencia con la arquitectura de datos de Odoo y modelos como blog.post.
Si necesita ayuda con su implementación de Odoo, módulos personalizados o integraciones, estamos aquí para ayudar. Reserve una demostración para discutir su proyecto.