Django
RangeFields - eine Gruppe von PostgreSQL-spezifischen Feldern
Suche…
Syntax
- von django.contrib.postgres.fields importieren Sie * RangeField
- IntegerRangeField (** Optionen)
- BigIntegerRangeField (** Optionen)
- FloatRangeField (** Optionen)
- DateTimeRangeField (** Optionen)
- DateRangeField (** Optionen)
Einschließen numerischer Bereichsfelder in Ihr Modell
Es gibt drei Arten von numerischen RangeField
in Python. IntegerField
, BigIntegerField
und FloatField
. Sie konvertieren in psycopg2
NumericRange
s, akzeptieren jedoch Eingaben als native Python-Tupel. Die Untergrenze ist eingeschlossen und die Obergrenze ist ausgeschlossen.
class Book(models.Model):
name = CharField(max_length=200)
ratings_range = IntegerRange()
Einrichten für RangeField
-
'django.contrib.postgres'
Sie'django.contrib.postgres'
zu IhremINSTALLED_APPS
- Installieren Sie
psycopg2
Erstellen von Modellen mit numerischen Bereichsfeldern
Es ist einfacher und einfacher, Werte als Python-Tupel anstelle von NumericRange
.
Book.objects.create(name='Pro Git', ratings_range=(5, 5))
Alternative Methode mit NumericRange
:
Book.objects.create(name='Pro Git', ratings_range=NumericRange(5, 5))
Verwendung enthält
Diese Abfrage wählt alle Bücher mit einer Bewertung von weniger als drei aus.
bad_books = Books.objects.filter(ratings_range__contains=(1, 3))
Verwendung von included_by
Diese Abfrage ruft alle Bücher ab, deren Bewertungen größer oder gleich Null und weniger als sechs sind.
all_books = Book.objects.filter(ratings_range_contained_by=(0, 6))
Überlappung verwenden
Diese Abfrage erhält alle überlappenden Termine von sechs bis zehn.
Appointment.objects.filter(time_span__overlap=(6, 10))
Verwenden Sie None, um keine obere Grenze anzugeben
Diese Abfrage wählt alle Bücher mit einer Bewertung größer oder gleich vier aus.
maybe_good_books = Books.objects.filter(ratings_range__contains=(4, None))
Bereichsvorgänge
from datetime import timedelta
from django.utils import timezone
from psycopg2.extras import DateTimeTZRange
# To create a "period" object we will use psycopg2's DateTimeTZRange
# which takes the two datetime bounds as arguments
period_start = timezone.now()
period_end = period_start + timedelta(days=1, hours=3)
period = DateTimeTZRange(start, end)
# Say Event.timeslot is a DateTimeRangeField
# Events which cover at least the whole selected period,
Event.objects.filter(timeslot__contains=period)
# Events which start and end within selected period,
Event.objects.filter(timeslot__contained_by=period)
# Events which, at least partially, take place during the selected period.
Event.objects.filter(timeslot__overlap=period)
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow