Zoeken…


Syntaxis

  • van django.contrib.postgres.fields import * RangeField
  • IntegerRangeField (** opties)
  • BigIntegerRangeField (** opties)
  • FloatRangeField (** opties)
  • DateTimeRangeField (** opties)
  • DateRangeField (** opties)

Numerieke bereikvelden in uw model opnemen

Er zijn drie soorten numerieke RangeField s in Python. IntegerField , BigIntegerField en FloatField . Ze converteren naar psycopg2 NumericRange s, maar accepteren invoer als native Python-tupels. De ondergrens is opgenomen en de bovengrens is uitgesloten.

class Book(models.Model):
    name = CharField(max_length=200)
    ratings_range = IntegerRange()

Instellen voor RangeField

  1. voeg 'django.contrib.postgres' aan uw INSTALLED_APPS
  2. installeer psycopg2

Modellen maken met numerieke bereikvelden

Het is eenvoudiger en gemakkelijker om waarden in te voeren als een Python-tuple in plaats van een NumericRange .

Book.objects.create(name='Pro Git', ratings_range=(5, 5))

Alternatieve methode met NumericRange :

Book.objects.create(name='Pro Git', ratings_range=NumericRange(5, 5))

Gebruik bevat

Deze zoekopdracht selecteert alle boeken met een beoordeling lager dan drie.

bad_books = Books.objects.filter(ratings_range__contains=(1, 3))

Contain_by gebruiken

Met deze zoekopdracht worden alle boeken met beoordelingen groter dan of gelijk aan nul en kleiner dan zes opgehaald.

all_books = Book.objects.filter(ratings_range_contained_by=(0, 6))

Overlap gebruiken

Deze query krijgt alle overlappende afspraken van zes tot tien.

Appointment.objects.filter(time_span__overlap=(6, 10))

Geen gebruiken om geen bovengrens aan te geven

Deze zoekopdracht selecteert alle boeken met een beoordeling groter dan of gelijk aan vier.

maybe_good_books = Books.objects.filter(ratings_range__contains=(4, None))

Bereik operaties

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow