【问题标题】:How to use a Wizard in Odoo 10?如何在 Odoo 10 中使用向导?
【发布时间】:2018-11-30 09:45:03
【问题描述】:

这是我的代码:

    class StudentWizard(models.TransientModel):
        _name = 'student.wizard'

        def _get_default_students(self):
            return self.env['ecole.partner.school'].browse(self.env.context.get('active_ids'))

        student_ids = fields.Many2many('ecole.partner.school', String="Student", default=_get_default_students)
        school_name = fields.Many2one(comodel_name="horanet.school.establishment",
                                      string="Etablissement Scolaire",
                                      required=True)
        school_year = fields.Many2one(string='Période',
                                      ondelete='SET NULL',
                                      comodel_name="ecole.partner.school.years",
                                      required=True)
        school_level = fields.Many2one(comodel_name="horanet.school.grade",
                                       string="Niveau Scolaire",
                                       required=True)
        #level = fields.Char('Level')

        api.multi
        def set_student_level(self):
            for record in self:
                if record.student_ids:
                    for student in record.student_ids:
                        update_student = self.env['ecole.partner.school']
                        partner_id = update_student.partner_id
                        school_year = update_student.school_year
                        school_name = update_student.school_name
                        half_pension = update_student.half_pension
                        nursery = update_student.nursery

                        student.school_year = school_year
                        student.school_level = self.school_level
                        student.school_name = school_name

                        vals = {'partner_id': partner_id, 'nursery': nursery}
                        res = update_student.create(vals)

                    return res

My View:

        <act_window id="student_wizard_action" name="Mise à jour des élèves" res_model="student.wizard"
                    src_model="ecole.partner.school"
                    view_mode="form" target="new" multi="True"/>

        <record id="student_wizard_view" model="ir.ui.view">
            <field name="name">student Marks Views</field>
            <field name="model">student.wizard</field>
            <field name="arch" type="xml">
                <form>
                    <group>
                        <field name="student_ids" widget="many2many_list"/>
                        <field name="school_name"/>
                        <field name="school_year"/>
                        <field name="school_level"/>
                    </group>
                    <footer>
                        <button name="set_student_level" string="Passage au niveau suivant" class="oe_right oe_highlight"
                                type="object"/>
                        <button string="Cancel" class="oe_right" special="cancel"/>
                    </footer>
                </form>
            </field>
        </record>

我喜欢在我的模型 school.partner.school 中创建一个新记录,但问题是我创建的模型是空的。我不明白为什么。

【问题讨论】:

  • 你能解释一下吗!!你想保存瞬态模型的记录吗?
  • 不一定。在按钮的帮助下,我想更新字段的值而不覆盖旧值以保留历史记录。我不知道该怎么做。我是 Odoo 的初学者
  • 首先,如果是瞬态模型,那么数据将临时存储在数据库中。我认为您想在模型名称“ecole.partner.school”中创建数据。我说的对吗?
  • 是的,你是对的。我想在模型“ecole.partner.school”中更新它们。但是有几个值要更新。我至少想了解一个值,例如“school_name”
  • @VishalKhichadiya 道歉我错误地拒绝了您的编辑!它应该得到其他审稿人的批准(我希望)。

标签: python xml odoo wizard


【解决方案1】:

要更新记录,你必须先找到它!

model 'ecole.partner.school' 不能是 Transient 模型。

请创建适合您要求的域,而不是 []。

@api.multi
def set_student_level(self):
    domain = []

    for record in self:
        for student in record.student_ids:
            update_student = self.env['ecole.partner.school'].search(domain,limit=1)
            if update_student:
                partner_id = update_student.partner_id
                school_year = update_student.school_year
                school_name = update_student.school_name
                half_pension = update_student.half_pension
                nursery = update_student.nursery
                student.school_year = school_year
                student.school_level = self.school_level
                student.school_name = school_name
                vals = {'partner_id': partner_id, 'nursery': nursery}
                res = update_student.create(vals)
    return True

【讨论】:

  • 结果是一样的,比如图片。也许我的变量“nursery = update_student.nursery”是错误的?在这个变量中,我想检索每个选定学生的“nursery”值,以使用 create () 方法复制它们。谢谢
  • 我才明白,它只是一个 TransientModel 助手,一段时间后,基础被擦除,这不是我想做的。我希望更新保持不变!了解更新功能只需要一点帮助。
  • 正如我之前在评论中提到的,TransientModel 将临时数据存储在 odoo 中。
  • 我用模型替换了 TransientModel。评论更新不删除最后一条记录?
  • 这 3 行 student.school_year = school_year 、 student.school_level = self.school_level 和 student.school_name = school_name 正在更新您的最后一条记录,如果您不想更新,请将其从代码中删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多