Wie erstelle ich einen Alias ​​für das Django Model Feld?

9

Mein Django-Modell hat ein Datetime-Feld mit dem Namen 'updatedOn', ich muss eine Bibliotheksfunktion für dieses Modell verwenden, um einige Statistiken zu berechnen, aber die Funktion setzt den Datetime-Feldnamen 'time' voraus, hier wird die Funktion verwendet die Datetime:

%Vor%

Wie kann ich, ohne den Bibliothekscode zu berühren, einen Alias ​​"time" erstellen, um auf das Feld "updatedOn" zu verweisen, damit ich die Funktion?

verwenden kann?     
NeoWang 24.09.2013, 15:13
quelle

4 Antworten

4

Ich habe das nicht sehr gründlich untersucht, aber intuitiv könnten Ihnen einige der folgenden Möglichkeiten helfen.

Benutzerdefinierter Manager

Ein benutzerdefinierter Manager mit einer modifizierten get_queryset -Methode, die nach updatedOn sucht wenn nach time gefiltert wird.

Benutzerdefinierter Feldtyp

Es könnte möglich sein, einen benutzerdefinierten Feldtyp zu erstellen, der nur als ein Verweis auf ein anderes Feld.

Hacking der model._meta.fields

Das _meta.fields des Modellobjekts scheint die Liste der Felder in diesem Objekt zu enthalten. Vielleicht könnten Sie versuchen, ein Dummy-Feld namens time hinzuzufügen, das sich auf das Feld updatedOn bezieht.

    
miikkas 24.09.2013 17:02
quelle
2

Erstellen Sie eine Eigenschaft für das Feld in Ihrem Modell:

%Vor%     
hellsgate 24.09.2013 15:47
quelle
2

Dieses alte Django Snippet , für mich gearbeitet, bis Django 1.11. Als @Jaberwocky virtual_only kommentiert wird in Django 2.0

Doch die deprecation Warnung liest, dass dieses Feld ist veraltet < a href="https://github.com/django/django/blob/ad8036d715d4447b95d485332511b4edb1a40c0e/docs/releases/1.10.txt#L1164"> für private_only , obwohl dies nicht in den Merkmalen erwähnt wird Entferne den obigen Link.

%Vor%     
raratiru 28.10.2017 23:42
quelle
1

Nach dem Vorschlag von miikkas re model.Manager, kam ich auf den folgenden, der für den viel einfacheren Fall des Abrufen des ID-Feldes durch Abfrage von UUID funktioniert. Die Datenbank wurde erstellt, wobei die ID ein varchar-Feld ist, das für eine hexadezimale Zeichenfolge verwendet wird, und ich rüste ein sequenzielles Integer-ID-Feld nach, so dass ich Djangos Auth-Modul verwenden kann, das es erfordert. und ich möchte das in Schritten machen, daher der Hack.

%Vor%

Jetzt kann ich:

%Vor%

filter könnte auf die gleiche Weise ausgeführt werden.

vielleicht kann dies helfen, dass jemand anders nach einem Weg sucht, ein "Alias" oder "Synonym" für ein Django-Modellfeld zu verwenden. Ich glaube nicht, dass es dem OP helfen wird. Der benutzerdefinierte Feldtyp könnte der bessere allgemeine Ansatz sein.

    
jcomeau_ictx 26.01.2015 08:02
quelle

Tags und Links