Přejít na obsah
Menu
You need to be registered to interact with the community.
This question has been flagged
2 Odpovědi
1231 Zobrazení

Hello,

I am trying to install my custom module that extends the stock.quant model. However, when I attempt to install it, I get the following error:

ValueError: The _name attribute Applicant is not valid.


This error appears during module installation and prevents the module from installing properly.
Other modules that extend stock.quant using _inherit work fine.

This is my code:

from odoo import models, fields, api


class StockQuant(models.Model):# Importante: mismo nombre para extender

_name = 'stock.quant' # REQUERIDO para herencia múltiple

_inherit = ['stock.quant', 'mail.thread', 'mail.activity.mixin'] # Herencia múltiple para chatter y actividades

_mail_post_access = 'read'


has_comments = fields.Boolean(

string='Comentarios',

compute='_compute_has_comments',

store=True,

help='Indica si el ajuste tiene comentarios',

)

inventory_quantity = fields.Float(

string='Cantidades contadas',

digits='Product Unit of Measure',

help='Cantidad contada durante el inventario físico',

default=0.0,

)


@api.depends('message_ids')

def _compute_has_comments(self):

"""Computar si tiene comentarios"""

for record in self:

# Filtrar solo mensajes de usuarios (no notificaciones del sistema)

user_messages = record.message_ids.filtered(

lambda m: m.message_type in ('comment', 'email')

)

record.has_comments = bool(user_messages)


def message_post(self, **kwargs):

"""Override para forzar recálculo después de añadir mensaje"""

result = super().message_post(**kwargs)

# Forzar recálculo inmediato

self.sudo()._compute_has_comments()

return result


def action_open_quant_form_modal(self):

self.ensure_one()

action = self.env.ref('stock_quant_comments.action_stock_quant_with_chatter').sudo().read()[0]

action.update({

'res_id': self.id,

'name': 'Comentarios - ' + self.product_id.name,

})

return action



class MailMessage(models.Model):

_inherit = 'mail.message'


def unlink(self):

"""Override para recalcular has_comments cuando se eliminan mensajes"""

# Recopilar todos los stock.quant afectados ANTES de eliminar

affected_quants = self.env['stock.quant']

for message in self:

if message.model == 'stock.quant' and message.res_id:

try:

quant = self.env['stock.quant'].browse(message.res_id)

if quant.exists():

affected_quants |= quant

except Exception:

pass # Ignorar errores de acceso

# Ejecutar eliminación normal

result = super().unlink()

# Recalcular después de eliminar

if affected_quants:

try:

affected_quants.sudo()._compute_has_comments()

# Forzar commit para asegurar que se guarde

self.env.cr.commit()

except Exception:

pass # Ignorar errores y continuar

return result




Avatar
Zrušit
Autor Nejlepší odpověď

.

Avatar
Zrušit
Nejlepší odpověď

Hi,

In Odoo, when you want to extend an existing model like stock.quant, you must not redefine _name unless you are intentionally creating a new model with the same technical name. Mixing _name and _inherit in this way causes Odoo to treat your class as a new model named stock.quant, rather than as an extension of the existing one. To correctly extend stock.quant, remove the _name line entirely and use _inherit.


Please refer to the code below:

from odoo import models, fields, api

class StockQuant(models.Model):
_inherit = 'stock.quant'

has_comments = fields.Boolean(
string='Comentarios',
compute='_compute_has_comments',
store=True,
help='Indica si el ajuste tiene comentarios',
)
# Your custom fields and codes


Hope it helps.

Avatar
Zrušit
Autor

Hi, "Hi, I already tried removing the _name line and leaving only the following line:

_inherit = ['stock.quant', 'mail.thread', 'mail.activity.mixin']

But I'm still getting the same error: The _name attribute StockQuant is not valid.
I even tried installing it on a fresh Odoo 18 instance where the module had never been installed before, and I'm still getting the same error. Why is that? Could it be because I'm inheriting from multiple models in _inherit? Is there another way to define them? Thank you for your response!"

Related Posts Odpovědi Zobrazení Aktivita
0
čvc 25
354
1
kvě 25
1272
0
bře 25
1135
1
úno 25
1844
Stock managing Vyřešeno
1
led 25
1914