Django의 배열 필드/값으로 QuerySet 필터링

4422 단어 databasearraydjango
Django로 작업할 때 필터링queryset은 수행해야 할 가장 중요하고 재미있는 작업 중 하나입니다.
배열/목록 값으로 작업하는 데 익숙한 경우 배열 필드 또는 값으로 작업할 때 쿼리를 최적화하는 방법을 알고 싶을 수 있습니다. 🚀

글쎄, 몇 가지 필터 방법이나 배열 필드 또는 값을 배우자.

배열 값에 대한 in() 메서드



ID 목록이 있다고 가정합니다. 목록에서 id 값과 일치하는 id를 가진 항목만 포함하도록 aqueryset를 필터링하려고 합니다.

ids = [1,4,8,9]

Products.objects.filter(id__in=ids)


이는 SQL에서 동일합니다.

SELECT * FROM products WHERE id IN (1,4,8,9);


어레이 필드


ArrayField는 데이터 목록을 저장하는 데 사용되는 필드입니다. 다른 기사에서 이 분야에 대해 자세히 알아볼 것입니다. 그러나 여기에 이 ​​필드를 사용하는 모델의 기본 예가 있습니다.

from django.contrib.postgres.fields import ArrayField
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    tags = ArrayField(models.CharField(max_length=255), size=10)


엄청난! 데이터베이스에서 shoe 태그가 있는 모든 제품을 검색하거나 shoepants 태그가 있는 더 흥미로운 제품을 검색한다고 가정해 보겠습니다.

이를 위해 contains 필터를 사용합니다.

# Retrieving all products with shoe tag

Product.objects.filter(tags__contains=['shoe'])

# Retrieving all products with shoe and pant tags

Product.objects.filter(tags__contains=['shoe', 'pant'])


기본적으로 그게 다입니다.👀

또한 contained_by 의 반대인 contains와 같은 흥미로운 필터와 검색된 항목에 전달된 값이 적어도 하나 이상 포함되어 있는지 확인하는 overlap 필터를 찾을 수 있습니다.

bloggu.io을(를) 사용하여 게시된 기사. 무료로 사용해 보세요.

좋은 웹페이지 즐겨찾기