مدل ها در جنگو با فیلدهایی مانند CharField، IntegerField، BooleanField و . تعریف می شوند. این فیلدها برای دیتابیس sqlite3 که بصورت پیش فرض در جنگو وجود دارد مورد استفاده قرار می گیرند.
اگر ما دیتابیس را به جای sqlite3 به Postgres تغییر دهیم این دیتابیس تعدادی فیلدهای مختص خود را به مدل های ما اضافه می کند. این فیلدها شامل JSONField، HStoreField، CITextField، ArrayField و فیلدهای Range هستند. در این پست به معرفی ArrayField می پردازیم.
این فیلد همانطور که از نامش پیداست به ما این امکان را می دهد که آرایه ای از داده ها را به دیتابیس اضافه کنیم. داده های آرایه باید از یک نوع باشند.
class ArrayField(base_field, size=None, **options)
base_field همان نوع داده های ورودی است که تعریف آن اجباری است و نوع آن باید از فیلدهای مدل مشخص شود برای نمونه نوع آن می تواند CharField یا IntegerField تعریف شود. نوع آن می تواند از نوع آرایه هم باشد. یعنی آرایه ای از آرایه ها داشته باشیم. استفاده از همه ی مدل ها به جز فیلدهای ارتباطی یعنی OneToOneField، ForeignKey و ManyToManyField ممکن است.
آرگومان ورودی Size حداکثر سایز آرایه را مشخص می کند و تعریف آن اختیاری است. البته در حال حاضر دیتابیس Postgres اندازه ی آرایه را به این سایر محدود نمی کند و آن را نادیده می گیرد.
from django.contrib.postgres.fields import ArrayField
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=200)
colors = ArrayField(models.CharField(max_length=20, blank=True))
علاوه بر راه های جستجویی که برای همه ی مدل ها وجود دارد ArrayField تعدادی فیلد جستجوی مختص هم دارد. در این بخش از مدل تعریف شده ی بالا استفاده می شود که سه نمونه شیء زیر از آن در دیتابیس ساخته شده اند.
>>> Product.objects.create(name='Mobile phone Samsung', colors=['red','white','black'])
>>> Product.objects.create(name='Laptop Toshiba 2020', colors=['black'])
>>> Product.objects.create(name='IPad', colors=['white','yellow'])
جستجوی شامل بودن. در واقع مقدار ورودی باید زیرمجموعه ای از داده ها باشد.
>>> Product.objects.filter(colors__contains=['black'])
که نتیجه ی زیر را به ما می دهد:
<QuerySet [<Product: Mobile phone Samsung>, <Product: Laptop Toshiba 2020>]>
برعکس جستجوی بالا عمل می کند به طوری که داده های ذخیره شده باید زیرمجموعه ای از مقدار ورودی باشند.
این جستجو برای این به کار می رود که هرگونه اشتراکی بین داده ها و مقدار ورودی را پیدا کند.
طول آرایه را برمیگرداند.
>>> Product.objects.filter(colors__len=1)
که نتیجه ی زیر را به ما می دهد:
<QuerySet [<Product: Laptop Toshiba 2020>]>
جستجوی ایندکسی آرایه را برمیگرداند.
>>> Product.objects.filter(colors__1='white')
>>> Product.objects.filter(colors__100='red')
که به ترتیب چنین نتیجه ای دارند:
<QuerySet [<Product: Mobile phone Samsung>]>
<QuerySet []>
جستجوی بخشی از آرایه را برمیگرداند.
درباره این سایت