0

モジュールからいくつかのフィールドを取得する必要があるウィザードがありますが、このアクションを実行しようとすると、次のエラーが発生します。

AttributeError: "Field 'name' does not exist in object 'browse_record(wizard_set_ages, 1)'"

問題は、フィールドからデータを取得する方法がわからないことです。選択したすべてのレコードを繰り返し処理し、その操作を実行する必要があります (name:Atul -> set_description() -> description: ATUL のように、名前を取り、caps lock の説明に書き込みます)。wizard.py コードは次のとおりです。

from osv import osv, fields

class test_wizard(osv.osv_memory):
    _name='wizard_set_ages'
    _columns={}

    def set_all_age(self, cr, uid, ids, context=None):
        mystudents = self.pool.get('student.student')
    for student in mystudents.browse(cr, uid, ids, context=context):
        my_description = str(student.name).upper()
        mystudents.write(cr, uid, student.id, {'notes' : my_description})

"""edit same for set_all_age        def set_selected_age(self, cr, uid, ids, context=None):
    for prod in self.browse(cr, uid, ids, context=context):         
            my_details = str(prod.name).upper()
        self.write(cr, uid, prod.id, {'notes': my_details }) """

ここにstudent.pyファイルがあります:

from osv import osv, fields


class student_student(osv.osv):
    _name = 'student.student'
    _columns = {
                'name' : fields.char('Student Name', size = 16, required = True, translate = True),
                'age' : fields.integer('Age'),
                'percentage' : fields.float('Percentage', help = 'This field will add average marks of the students out of 100'),
                'gender' : fields.selection([('male', 'Male'), ('female', 'Female')], 'Gender'),
                'active' : fields.boolean('Active'),
                'notes' : fields.text('Details'),
                }
    _defaults = {
                'name' : 'Atul',
                'active' : True,
                'age' : 13,
                }

    def set_age(self, cr, uid, ids, context=None):
        for prod in self.browse(cr, uid, ids, context=context):
            dict = self.read(cr, uid, ids, ['name'])            
                my_details = str(prod.name).upper()
            self.write(cr, uid, prod.id, {'notes': my_details })
        return True

student_student()


編集:wizard_view.xmlを追加:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>        
    <!-- create a view with a unique id -->
        <record id="view_set_all_ages_wizard" model="ir.ui.view">
            <field name="name">wizard_set_ages_form</field>
            <field name="model">wizard_set_ages</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
            <!-- create a normal form view, with the fields you've created on your python file -->
                <form string="Set All Student Ages" version="7.0">
                    <group >
                        <separator string="TEST" colspan="2"/>
                        <newline/>
                    </group>
                    <div style="text-align:right">
                        <button icon="gtk-cancel" special="cancel" string="Cancel"/>
                        <button icon="gtk-ok" name="set_all_age" string="Set All Details" type="object" />
            <button icon="gtk-ok" name="set_selected_age" string="Set Only Selected Details" type="object" />
                    </div>

               </form>
            </field>
        </record>
        <!-- your action window refers to the view_id you've just created -->
        <record id="action_set_all_ages" model="ir.actions.act_window">
            <field name="name">Set All Ages</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">wizard_set_ages</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>
            <field name="view_id" ref="view_set_all_ages_wizard"/>
            <field name="target">new</field> 
        </record>

        <act_window id="action_set_all_ages"
                name="Set All Ages"
                res_model="wizard_set_ages" 
        src_model="student.student"
                view_mode="form" 
                target="new"
        key2="client_action_multi"
        />
    </data>
</openerp>
4

3 に答える 3

0

最初の問題「ブラウズ レコード ウィザードに名前が存在しません」に戻ると、これをトリガーするのは 2 つのことだけです。モデルに名前という列がないか、存在しないレコードをブラウズしました。

ただし、2番目の問題では..

あなたのボタンは、wizard_set_ages のバッキング モデルを持つフォーム上にあります。つまり、ユーザーがボタンをクリックすると、wizard_set_ages モデルで set all age が実行されます。次に、student.student で self.pool.get を実行し、ids 引数を使用して参照しますが、ここに問題があります。フォームはウィザード モデル上にあるため、ids 引数には学生モデルではなくウィザード モデルの ID が含まれるため、それらを使用して学生モデルを参照することはできません。通常のパターンは、学生 ID を検索するか、作成時にウィザードに保存することです。この例については、在庫ピッキング ウィザードをご覧ください。

于 2014-06-26T21:24:00.543 に答える
0

wizard_set_ages にフィールドはありませんが、試しました

for prod in self.browse(cr, uid, ids, context=context):     
            my_details = str(prod.name).upper()

that( ) の代わりに myobj を使用myobj = self.pool.get('student.student')して更新し、そのテーブルを読み取ります

于 2014-06-26T10:21:40.547 に答える