3. eq_rmanager: Datenbank

Lesen und schreiben der Datenbank über pythonobjekte.

self

Mit self kann auf alle felder des models zugreifen. Alles was sonst SQL benötigt ist über die python Syntax erreichbar.

Datensätz in die Datenbank schreiben:

for item in list:
    vals = {}
    vals.update(item)
    self.create(vals)

Jeder Gegenstand in dieser Liste wird hier in die Datenbank geschrieben. Die create Methode legt einen neuen Datensatz an. All dies ohne SQL.

self.env['MODELL_NAME'].search([])

Häufig ist es notwendig Daten aus anderen Tabellen zu lesen. Dies wird bewerkstelligt indem man in env[] nach dem entsprechenden Modell sucht.

settings = self.env['requirement.settings'].search([])

Diese Zeile würde ein Objekt des Modells requirement.settings zurückgeben. Jetzt stehen auch alle Felder und Einträge von diesem Modell zur Verfügung.

self.search_read()

languages = self.search_read([], ['language'])

Gibt alle Inhalte von language und deren ids zurück.

Sektionen sollen beliebig weit verschachtelbar sein. Dies wird durch Rekussion erreicht. Zusätlich sollen beim löschen einer Sektion auch alle darunterliegenden Sektione gelöscht werden.

In name_get ist die Rekursion definiert, es wird die id und eine Liste der Untersektionen in umgekehrter Reihenfolge zurückgegeben.

@api.multi
def name_get(self):
    def get_names(section):
        res = []
        while section:
            res.append(section.name)
            section = section.parent_id
        return res
    return [(section.id, " / ".join(reversed(get_names(section)))) for section in self]

def _name_get_fnc(self):
    res = self.name_get()

    names = []
    for  i in res:
        names.append(i[1])

    for id, name in itertools.izip(self, names):
        id.complete_name = name
    return res

Um alle Untersektionen einer Sektion zu löschen muss die unlink Methode überschrieben werden.

@api.multi
def unlink(self):
    for section in self:
        section_pool = self.env['requirement.sections']
        section_objs = section_pool.search([('parent_id', '=', section.id)])
        for section_obj in section_objs:
            section_obj.unlink()
    return super(sections, self).unlink()

Dies wird in der Tree view angezeigt.

requirement_sections_view.xml

<record id="requirement_section_tree_view" model="ir.ui.view">
    <field name="name">line treeview</field>
    <field name="model">requirement.sections</field>
    <field name= "arch" type = "xml">
        <tree string="lines" default_order="write_date desc">
            <field name="complete_name"/>
            <field name="write_date"/>
        </tree>
    </field>
</record>

Das Ergbnis sieht dann so aus.