Django
ArrayField - एक PostgreSQL-विशिष्ट क्षेत्र
खोज…
वाक्य - विन्यास
- django.contrib.postgres.fields से ArrayField आयात करें
- वर्ग ArrayField (base_field, आकार = कोई नहीं, ** विकल्प)
- FooModel.objects.filter (array_field_name__contains = [ऑब्जेक्ट्स, चेक चेक करें)
- FooModel.objects.filter (array_field_name__contain_by = [ऑब्जेक्ट, टू, चेक]
टिप्पणियों
ध्यान दें कि हालांकि size
पैरामीटर PostgreSQL को पारित किया गया है, PostgreSQL इसे लागू नहीं करेगा।
ArrayField
s का उपयोग करते ArrayField
, पोस्टग्रेजेकल सरणियों प्रलेखन से चेतावनी के इस शब्द को ध्यान में रखना चाहिए।
युक्ति: Arrays सेट नहीं हैं; विशिष्ट सरणी तत्वों की खोज करना डेटाबेस के गलत होने का संकेत हो सकता है। प्रत्येक आइटम के लिए एक पंक्ति के साथ एक अलग तालिका का उपयोग करने पर विचार करें जो एक सरणी तत्व होगा। यह खोज करना आसान होगा, और बड़ी संख्या में तत्वों के बेहतर होने की संभावना है।
एक बुनियादी ArrayField
PostgreSQL ArrayField बनाने के लिए, हमें ArrayField को उस डेटा का प्रकार देना चाहिए जो हम चाहते हैं कि वह अपने पहले तर्क के रूप में एक फ़ील्ड के रूप में संग्रहीत हो। चूँकि हम बुक रेटिंग्स जमा करेंगे, हम FloatField
उपयोग FloatField
।
from django.db import models, FloatField
from django.contrib.postgres.fields import ArrayField
class Book(models.Model):
ratings = ArrayField(FloatField())
एक ArrayField के अधिकतम आकार को निर्दिष्ट करना
from django.db import models, IntegerField
from django.contrib.postgres.fields import ArrayField
class IceCream(models.Model):
scoops = ArrayField(IntegerField() # we'll use numbers to ID the scoops
, size=6) # our parlor only lets you have 6 scoops
जब आप आकार पैरामीटर का उपयोग करते हैं, तो यह पोस्टग्रैस्कल के माध्यम से गुजरता है, जो इसे स्वीकार करता है और फिर इसे अनदेखा करता है! इस प्रकार पोस्टग्रेजल कंसोल का उपयोग करके scoops
फ़ील्ड में 7 पूर्णांक जोड़ना काफी संभव है।
के साथ ArrayField की सदस्यता के लिए क्वेरी
यह क्वेरी एक चॉकलेट स्कूप और एक वेनिला स्कूप के साथ सभी शंकु वापस करती है।
VANILLA, CHOCOLATE, MINT, STRAWBERRY = 1, 2, 3, 4 # constants for flavors
choco_vanilla_cones = IceCream.objects.filter(scoops__contains=[CHOCOLATE, VANILLA])
आयात करने के लिए मत भूलना IceCream
अपने से मॉडल models.py
फ़ाइल।
यह भी ध्यान रखें कि django ArrayField
s के लिए एक इंडेक्स नहीं बनाएगा। यदि आप उन्हें खोजने जा रहे हैं, तो आपको एक इंडेक्स की आवश्यकता होगी और इसे मैन्युअल रूप से अपनी माइग्रेशन फ़ाइल में RunSQL के लिए कॉल के साथ बनाने की आवश्यकता होगी।
घोंसले के शिकार ArrayFields
आप ArrayField
को एक और ArrayField
पास करके घोंसला ArrayField
सकते हैं क्योंकि यह base_field
।
from django.db import models, IntegerField
from django.contrib.postgres.fields import ArrayField
class SudokuBoard(models.Model):
numbers = ArrayField(
ArrayField(
models.IntegerField(),
size=9,
),
size=9,
)
सभी मॉडलों के लिए क्वेरी करना, जो किसी भी आइटम में निहित_by के साथ सूची में हैं
यह क्वेरी टकसाल स्कूप या वेनिला स्कूप के साथ सभी शंकुओं को वापस करती है।
minty_vanilla_cones = IceCream.objects.filter(scoops__contained_by=[MINT, VANILLA])