Django
RangeFields - PostgreSQL固有のフィールドのグループ
サーチ…
構文
- from django.contrib.postgres.fields import * RangeField
- IntegerRangeField(**オプション)
- BigIntegerRangeField(** options)
- FloatRangeField(** options)
- DateTimeRangeField(**オプション)
- DateRangeField(** options)
モデルに数値の範囲フィールドを含める
Pythonには3種類の数値RangeField
あります。 IntegerField
、 BigIntegerField
、およびFloatField
です。それらはpsycopg2
NumericRange
変換されpsycopg2
が、入力をネイティブPythonタプルとして受け入れます。 下限が含まれ、上限が除外されます。
class Book(models.Model):
name = CharField(max_length=200)
ratings_range = IntegerRange()
RangeFieldの設定
- あなたの
INSTALLED_APPS
'django.contrib.postgres'
を追加してください -
psycopg2
インストールする
数値範囲フィールドを含むモデルの作成
NumericRange
代わりにPythonタプルとして値を入力する方が簡単で簡単NumericRange
。
Book.objects.create(name='Pro Git', ratings_range=(5, 5))
NumericRange
代替メソッド:
Book.objects.create(name='Pro Git', ratings_range=NumericRange(5, 5))
containsを使う
このクエリは、評価が3未満のすべての書籍を選択します。
bad_books = Books.objects.filter(ratings_range__contains=(1, 3))
contained_byを使用する
このクエリは、0以上6未満の評価を持つすべての書籍を取得します。
all_books = Book.objects.filter(ratings_range_contained_by=(0, 6))
オーバーラップの使用
このクエリは、重複するすべての予定を6から10に取得します。
Appointment.objects.filter(time_span__overlap=(6, 10))
Noneを使用して上限を示さない
このクエリは、4以上の評価を持つすべての書籍を選択します。
maybe_good_books = Books.objects.filter(ratings_range__contains=(4, None))
範囲操作
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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow