20110226¶
Die Anpssungen in https://www.lino-framework.org/igen/index.html gingen erstaunlich schnell. Es gab natürlich noch einige Verbesserungen:
Beim manuellen Eingeben einer neuen Verkaufsrechnung (sales.Invoice)
kamen noch eine Serie von Problemen in lino.ui.extjs.ext_store
:
IntegerField (Invoice.number) : muss er leer erlauben, und dann selber ausfüllen
OneToOneField.form2obj machte Dummheiten mit dem salesdocument_ptr
Das mit dem before_save()
(sh. 2010-08-04)
scheint nun geregelt zu sein: alle Fälle habe ich durch
entsprechende full_clean()
auf diesen Modellen ersetzt.
Die war auch zum Setzen der Dokumentnummer nötig.
lino.core.kernel.analyze_models()
macht jetzt bis auf weiteres
noch eine Exception für den Fall dass noch irgendwo
eine before_save rumhängt.
Und cool: nebenbei habe ich doch noch eine elegantere Lösung für
mehrsprachige Datenbankfelder gefunden: lino.utils.babel.BabelCharField
.
Statt wie bisher
class Foo(models.Model):
name = models.CharField(_("Designation"),max_length=200)
def __unicode__(self):
return babelattr(self,'name')
add_babel_field(Foo,'name')
macht man jetzt einfach
class Foo(models.Model):
name = babel.BabelCharField(_("Designation"),max_length=200)
def __unicode__(self):
return babel.babelattr(self,'name')
01.40 Uhr. Ich habe Einschlafstörungen, weil der folgende Punkt noch behoben werden wollte:
dtosl funktioniert momentan nicht. Die funktionierte nur, als babel.setlang() auch locale.setlocale setzte. Damit gab es aber Probleme (entweder weil setlocale nicht threadsafe ist, oder weil meine babel.lc2locale() in vielen Konfigurationen nicht funktioniert). Auch benutzerspezifizierte Datumsformatierungen wie “row.started.strftime(‘%B %Y’)” kommen in Englisch statt in der Sprache des Dokuments. Stattdessen sollte ich wahrscheinlich
django.template.defaultfilters.date()
nutzen und mich auf Djangos Formatsyntax verlassen.
Hat nur anderthalb Stunden gedauert.
Statt BABEL_LANGS zu setzen, muss man jetzt die
echte LANGUAGES
reduzieren
(unter Verwendung von lino.sites.std.settings.language_choices()
).
Wenn man das nicht täte, hätte man eine Datenbank, in der alle Babelfelder in hundertfacher Ausführung existierten (eine für jede von Djangos sprachen).
Also nicht den Django-Defaultwert nehmen, sondern immer lokal setzen.