खोज…


वाक्य - विन्यास

  • 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])


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow