2017-12-28 6 views
3

Ich habe eine Methode, in der self eine einfache stock.move Aufzeichnung ist. Außerdem, wie Sie vielleicht wissen, hat stock.move Modell ein Feld mit dem Namen date. Wenn ich diesen Code in das Verfahren schreibe:Warum Odoo Millisekunden in Datetime-Feldern entfernt?

lines = self.search([ 
    ('date', '=', self.date), 
]) 

Es sollte mir zumindest die aktuelle Zeile zurückgeben. Und zwar, aber nur in einigen Servern. Andere geben nichts zurück. Warum? Denn wenn ich eine Abfrage, um die date in PostgreSQL zu bekommen, die Server, die funktionieren OK sind, zurückgeben 2017-12-27 17:10:00, jedoch die Server, die falsch arbeiten zurück 2017-12-27 17: 10: 00.131112. Also, für die Fälle mit miliseconds der ORM search Methode dies tut:

lines = self.search([ 
    (2017-12-27 17:10:00.131112, '=', 2017-12-27 17:10:00), 
]) 

self.date wird die Datetime Wert ohne die miliseconds Rückkehr und das ist, warum der Vergleich fehlschlägt. Ich muss die Millisekunden auch bekommen.

Wie kann ich das schaffen?

+0

Eigentlich denke ich, dass '' create_date' und write_date' Felder miliseconds haben sollte. 'Datetime'-Felder sollten nicht enthalten sein, da die 'DEFAULT_SERVER_DATETIME_FORMAT'-Konstante verwendet wird. Also ich weiß nicht, was in Ihrem Fall passiert – ChesuCR

Antwort

1

Absolut richtig, ich bestätige hier odoo Datetime nicht Zeitstempel in UTC, speichert es Datum in UTC. Schon seit odoo 5.0 arbeiten wir daran, bis heute.

In Odoo 11,0

id |  create_date   |   write_date   | date_expected  
-----+----------------------------+----------------------------+--------------------- 
    41 | 2017-12-21 13:06:06.927814 | 2017-12-21 13:06:06.927814 | 2017-12-21 13:01:30 
    7 | 2017-12-21 08:33:22.431197 | 2017-12-21 08:33:22.431197 | 2017-12-21 08:31:54 
    42 | 2017-12-21 13:07:03.659194 | 2017-12-21 13:07:03.659194 | 2017-12-21 13:06:54 
    2 | 2017-12-21 07:24:24.953689 | 2017-12-21 07:24:24.953689 | 2017-12-21 07:24:25 

Ja. odoo create_date, write_date kann Ihnen Millisekunden geben, vielleicht hilft es Ihnen. aber sicher in Datetime, nicht erlauben, so zu tun ...

Für den Fall, dass Sie brauchen wirklich Millisekunde Bedürfnisse, zusätzliches Feld hinzufügen zu speichern Millisekunde, als alles funktioniert.

Problem persist in odoo Community und Enterprise Ausgabe beide.

*** benötigen zusätzliche SMALL CUSTOMIZATION

+0

Wenn ich ein zusätzliches Feld hinzufügen, um die Millisekunden zu bekommen, von wo muss ich seinen Wert nehmen? Benutzer füllen das Feld "date" aus, und in der ORM 'create' Methode erhalte ich die datetime ohne Millisekunden, also kann ich create nicht sagen, um den milisekunden Teil in das zusätzliche Feld zu speichern. Ich löste jedoch mein spezielles Problem, indem ich im Suchvergleich +1 Sekunde hinzufügte, aber meine Lösung beantwortet nicht die Frage, die ich gerade mache. – forvas

+0

Overide odoo create-Methode, in der Sie Zeitstempel oder Millisekunde im zusätzlichen Feld direkt speichern können. Ich bin mir nicht sicher, was Sie an Modul arbeiten, aber erstellen Methode hilft, dies zu resovle. –