/ / Django-Modellabfrage schneidet den Wert der Spalte ab - django, python-2.7, django-models

Django-Modellabfrage schneidet den Wert der Spalte ab - django, python-2.7, django-models

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 № 1

Sie 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_valueDiese 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()