20100708 ======== (Fortsetzung von :doc:`gestern <0707>`) 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 :attr:`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; :attr:`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 :func:`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`. (:class:`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. :class:`countries.Country` hat jetzt ein Detail-Layout, in dem der neue Report CitiesByCountry angezeigt wird. :mod:`lino.modlib.dsbe.management.commands.load_tim` vergaß, das Feld :attr:`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 :ref:`cpaseupen` und auf :term:`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.