Benvenuto!
Questo è il forum ufficiale dell'Associazione Odoo Italia. Dopo esserti registrato potrai partecipare ponendo domande o rispondendo a quelle esistenti. Non scordarti di compilare il tuo profilo e consultare le linee guida prima di iniziare a scrivere.
[8] apertura wizard
premessa: si, vi scrivo dal passato, ancora è in giro la versione 8
detto questo, sto realizzando un piccolo wizard che mi permetta di inserire un prodotto diretamente in una Richiesta d'acquisto.
al model product.template ho inserito il mio button:
<field name="name">insert_product_to_purchase_request</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<xpath expr="/form/*" position="before">
<header>
<button name="action_insert_product_to_purchase_request"
string="Inserisci in RdA" type="object" class="oe_highlight"
groups="purchase_request.group_purchase_request_user,purchase_request.group_purchase_request_manager"
attrs="{'invisible':[('purchase_ok','=', False)]}"
/>
</header>
</xpath>
</field>
</record>
il relativo metodo apre (o almeno dovrebbe) la view del mio TransientModel in questo modo:
def action_insert_product_to_purchase_request(self):
view = self.env.ref('ies_variazioni_rda.view_wiz_import_product_pr')
wiz = self.env['wiz_import_product_pr'].create(
{
'my_product': self.id,
'my_product_qty': 1,
#'my_rda': None
}
)
return {
'name': 'Inserimento prodotto in RdA',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'view_type': 'form',
'res_model': 'ies_variazioni_rda.wiz_import_product_pr',
'views': [(view.id, 'form')],
'view_id': view.id,
'target': 'new',
'res_id': wiz.id,
'context': self.env.context,
}
Action e form view sono definite in questo modo
<act_window name="Inserimento Prodotto in Richiesta d'Acquisto"res_model="wiz_import_product_pr"
src_model="wiz_import_product_pr"
view_mode="form"
target="new"
multi="True"
id="action_insert_product_to_purchase_request"/>
<record id="view_wiz_import_product_pr" model="ir.ui.view">
<field name="name">Inserimento Prodotto in RdA</field>
<field name="model">wiz_import_product_pr</field>
<field name="arch" type="xml">
<form>
<group>
<field name="my_rda"/>
<field name="my_product" readonly="True"/>
<field name="my_product_qty"/>
</group>
<footer>
<button name="go_insert_product_in_rda" string="Salva" type="object" class="oe_highlight"/>
<button special="cancel" string="Annulla" class="oe_right"/>
</footer>
</form>
</field>
</record>
<record id="action_insert_product_to_purchase_request" model="ir.actions.act_window">
<field name="name">Inserimento Prodotto in Richiesta d'Acquisto</field>
<field name="res_model">wiz_import_product_pr</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="view_id" ref="view_wiz_import_product_pr"/>
</record>
Tutto sembrerebbe funzionare, il pulsante chiama la action che prova ad aprire il form (ho dei metodi per i domain che vengono invocati come mi aspetto). Però a fine apertura ricevo questo errore:
Traceback (most recent call last): File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 546, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 583, in dispatch result = self._call_function(**self.params) File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 319, in _call_function return checked_call(self.db, *args, **kwargs) File "/opt/odoo/buildout/parts/odoo/openerp/service/model.py", line 118, in wrapper return f(dbname, *args, **kwargs) File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 316, in checked_call return self.endpoint(*a, **kw) File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 812, in __call__ return self.method(*args, **kw) File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 412, in response_wrap response = f(*args, **kw) File "/opt/odoo/buildout/parts/odoo/addons/web/controllers/main.py", line 944, in call_kw return self._call_kw(model, method, args, kwargs) File "/opt/odoo/buildout/parts/odoo/addons/web/controllers/main.py", line 936, in _call_kw return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) AttributeError: 'NoneType' object has no attribute 'fields_view_get'
Sono bloccato come un somaro davanti ad un muro.
Vedete voi quello che io non vedo???
Ciao, Se provi ad aprire il wizard commentando questo:
wiz = self.env['wiz_import_product_pr'].create(
'my_product': self.id,
'my_product_qty': 1,
#'my_rda': None
}
)
e commenti anche il res_id nel return? Se ti apre il wizard allora gli passi i valori di default in un altro modo.
Ti posto un esempio di un modulo abbastanza vecchio che feci per v8 che se non erro apriva una tree:
@api.multi
def tua_funzione(self):
view_ref = self.env['ir.model.data'].get_object_reference('nome_modulo', 'vista_da_aprire')
view_id = view_ref[1] if view_ref else False
return {
'name': 'Nome Tree',
'view_type': 'form',
'view_mode': 'tree,form',
'views': [(False, 'tree'), (False, 'form')],
'res_model': 'tuo.model',
'view_id': view_id,
'type': 'ir.actions.act_window',
'target': 'current',
'context': {'default_product_id': id_prodotto}, #qui puoi mettere dei valori di default
'nodestroy': False,
}
Ottengo lo stesso identico errore.
Non penso che il problema sia il modo in cui apro il form da python, anche perchè i metodi per popolare i campi vengono invocati... deve esserci qualcosa che non va nell'xml, ma proprio non riesco a vederlo
Risolto grazie al grande Gianmarco, che mi ha fatto notare questa baggianata:
return {
'name': 'Inserimento prodotto in RdA',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'view_type': 'form',
'res_model': 'ies_variazioni_rda.wiz_import_product_pr',
'views': [(view.id, 'form')],
'view_id': view.id,
'target': 'new',
'res_id': wiz.id,
'context': self.env.context,
}
In realtà il modelo da aprire è 'wiz_import_product_pr' ora funziona tutto.
Grazie Gianmarco!
Resta informato
Informazioni sulla comunità
Strumenti di richiesta
Statistiche
Richiesta del: 18/03/20, 16:13 |
Vista: 3166 volte |
Ultimo aggiornamento: 23/03/20, 17:10 |