Recherche…


Syntaxe

  • à partir de django.contrib.postgres.fields import * RangeField
  • IntegerRangeField (** options)
  • BigIntegerRangeField (options **)
  • FloatRangeField (** options)
  • DateTimeRangeField (options **)
  • DateRangeField (** options)

Inclure des champs de plage numériques dans votre modèle

Il existe trois types de RangeField numériques dans Python. IntegerField , BigIntegerField et FloatField . Ils convertissent en psycopg2 NumericRange s, mais acceptent les entrées en tant que tuples Python natifs. La limite inférieure est incluse et la limite supérieure est exclue.

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

Mise en place pour RangeField

  1. Ajouter 'django.contrib.postgres' à votre INSTALLED_APPS
  2. installez psycopg2

Création de modèles avec des champs de plage numériques

Il est plus simple et facile de saisir des valeurs sous la forme d'un tuple Python au lieu d'un NumericRange .

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

Méthode alternative avec NumericRange :

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

Utiliser contient

Cette requête sélectionne tous les livres avec une note inférieure à trois.

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

Utiliser contain_by

Cette requête obtient tous les livres avec des évaluations supérieures ou égales à zéro et inférieures à six.

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

Utiliser le chevauchement

Cette requête obtient tous les rendez-vous qui se chevauchent de six à dix.

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

Utiliser None pour signifier aucune limite supérieure

Cette requête sélectionne tous les livres dont l’évaluation est supérieure ou égale à quatre.

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

Opérations de gammes

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow