Ich habe eine Abfrage wie diese definiert
SELECT DISTINCT substring(date::text from 1 for 8)||"000" AS date FROM my_table;
Wie kann man es in ein Django-Modell verwandeln?
date
ich mag das 20150403000
Die Abfrage soll zurückkehren 20150403
ohne das Nachlaufende 000
Was ich gerade habe ist so:
query.distinct("date")
BEARBEITET
Ok, die Frage war vage. Ich habe meine Frage neu definiert, da nicht einmal psql tun kann, was ich wollte (hier in der Übersetzung verloren). LOL
select to_date(CAST(date as TEXT), "YYYYMMDD") from my_table
Where to_date(CAST(date as TEXT), "YYYYMMDD")<=DATE "20141127" ;
Datum ist vom Typ bigint. Kann Django Modell Orm das handhaben?
Antworten:
0 für die Antwort № 1Sie können Django-Modelle verwenden to_python
.
Converts a value as returned by your database (or a serializer) to a Python object.
Beispielsweise:
class CustomDateTimeField(models.DateTimeField):
def to_python(self, value):
if isinstance(value, DateTimeField):
return value.rstrip("0")
Sie müssen dann die benutzerdefinierte Datumszeit für Ihr Modell verwenden.
Sagen my_date = CustomDateTimeField()
Es gibt auch, get_prep_value
Diese Methode dient zum Konvertieren von Python-Objekten in Abfragewerte.
Aktualisieren: Für die Abfrage mit Filter würde es versuchen, einen loopkup zu erreichen und Sie sollten den loopkup mit verwenden get_prep_lookup
Etwas wie das:
def get_db_prep_value(self, value, *args, **kwargs):
if value is not None:
return datetime.datetime.strptime(value[0:4] + "-" + value[4:6] + "-" + value[6:], "%Y-%m%d")
def get_prep_lookup(self, lookup_type, value):
return self.get_db_prep_value(value)
Beispiel Beispiel:
from django.db import models
import datetime
# Create your models here.
class CustomDateTimeField(models.Field):
__metaclass__ = models.SubfieldBase
def db_type(self, connection):
return "datetime"
def to_python(self, value):
if not value is None:
if isinstance(value, datetime.datetime):
return value.strftime("%Y-%m-%d")
else:
return value.rstrip("0")
def get_db_prep_value(self, value, *args, **kwargs):
if value is not None:
return datetime.datetime.strptime(value[0:4] + "-" + value[4:6] + "-" + value[6:], "%Y-%m-%d")
return None
def get_prep_lookup(self, lookup_type, value):
return self.get_db_prep_value(value.rstrip("0"))
class Person(models.Model):
name = models.CharField(max_length=25)
my_date = CustomDateTimeField()