20100708

(Fortsetzung von gestern)

Also Felder mit eindimensionaler Auswahlliste brauchen nicht nur kein hidden field, sondern dürfen keins haben. Das funktioniert jetzt einigermaßen (mit ein paar Schönheitsfehlern, die aber nicht blockierend sind). Einige der Konsequenzen:

  • Um rauszufinden, ob eine Auswahlliste “simple values” oder “value/text pairs” benutzt, gehe ich wie folgt vor: Um zu deklarieren, dass eine choices-Methode “simple values” (und nicht das Standardverhalten “value/text pairs”) zurückgibt, muss man ihr ein Attribut simple_values mit dem Wert True verpassen. Spontan dachte ich, dass das ganz einfach sei:

    @classmethod
    def template_choices(cls,print_method):
        return mixins.template_choices(print_method)
    template_choices.simple_values = True
    

    Aber da hatte ich mich geirrt. Weil die Methode schon den Dekorator @classmethod hat, kann man ihr keine Attribute mehr verpassen:

    AttributeError: 'classmethod' object has no attribute 'simple_values'
    

    Um das zu umgehen, benutze ich momentan die alte Syntax:

    def template_choices(cls,print_method):
        return mixins.template_choices(print_method)
    template_choices.simple_values = True
    template_choices = classmethod(template_choices)
    

    Was sind eigentlich Dekoratoren? Ein interessanter Artikel von Bruce Eckel half mir zu verstehen.

  • Die Antwort auf http://127.0.0.1:8000/api/notes/NoteTypes?fmt=json kommt nun richtig; NoteType.template hat jetzt kein Hidden-Feld mehr:

    {
      count: 2, rows: [
        { print_methodHidden: "appy", print_method: "AppyPrintMethod",
          id: 0, template: "phone.odt",
          name: "phone report"
        },
        { print_methodHidden: null, print_method: null,
          id: null,
          template: "",
          name: ""
        }
      ],
      title: "NoteTypes"
    }
    
  • Das this.value = v; am Ende meiner ComboBox.setValue() musste wieder rein.

Check-In

Diverse Bugs im extjsu behoben

Nächstes Problem: in http://127.0.0.1:8000/api/countries/Countries?fmt=grid wurden die iso_code nicht angezeigt, weil der Store immer “id” als primary key erwartete. Jetzt gibt es deshalb den neuen Konfigurationsparameter ls_id_property für Lino.GridPanel. (lino.modlib.countries.models.Country ist ja eine der wenigen Tabellen, die nicht ‘id’ als primary key haben).

Nächstes Problem: wenn ich in der Grid ein neues Land erstellen wollte, dann schickter er zwar ein korrektes POST http://127.0.0.1:8000/api/countries/Countries, aber der Server machte dann:

ValidationError: {'isocode': ValidationError({'isocode': u"Primary key '' may not be modified."})}

Merke: der pk einer neu erstellten und noch nicht gespeicherten Instanz ist nicht unbedingt None, sondern kann (wenn pk ein CharField ist) auch '' sein.

countries.Country hat jetzt ein Detail-Layout, in dem der neue Report CitiesByCountry angezeigt wird.

lino.modlib.dsbe.management.commands.load_tim vergaß, das Feld contacts.Contact.country zu füllen. Behoben.

Zwischendurch habe ich mich wieder nicht enthalten können, mit Sphinx zu spielen: Neuer Link “Show Source” im Fuß jeder Seite verweist auf den Quellcode der Dokumentation im Google-Repository. (Also die Sphinx-Option html_copy_source benutze ich nicht). Neuer Link “Online Link”, der auf die Seite selber verweist (den brauche vor allem ich, um von der lokal generierten Doku auf die Online-Version zu springen).

Mehrere Check-Ins und zum Schluss:

Release Lino 0.8.2 & DSBE 0.1.1

Diese Versionen laufen jetzt im ÖSHZ Eupen und auf Tups. Es sind noch viele Bugs drin, aber ich wollte mal sehen, wie die Performance auf einem “Produktionsserver” ist. Mein erster Eindruck: eher besorgniserregend… aber jetzt ist Feierabend.