python - 小写字段值 django 模型查询集
问题描述
我有一个对象的模型,并且为该模型的对象分配了几个标签。标签可以是大写、小写或两种情况的混合。我想编写一个查询集,它将返回那些具有我提供的相同标签的对象。注意:我正在使用 django-taggit 模块。
视图.py
def home(request):
book = Book.objects.filter(tags__name__in= map(lambda s:s.lower(), ['harry-potter', 'Champak', 'Physics']))
print(book)
return HttpResponse("Books Retrieved")
模型.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
from taggit.managers import TaggableManager
from taggit.models import GenericUUIDTaggedItemBase, TaggedItemBase
class UUIDTaggedItem(GenericUUIDTaggedItemBase, TaggedItemBase):
class Meta:
verbose_name = _("Tag")
verbose_name_plural = _("Tags")
class Book(models.Model):
name = models.CharField(max_length=100)
details = models.TextField(blank=True)
tags = TaggableManager(through=UUIDTaggedItem, blank = True)
现在我想退回所有标签为“哈利波特”、“哈利波特”或任何其他词的书。
PS:如果我们可以降低'tags__name__in'列表,我们的工作就完成了。
解决方案
您可以使用以下方法制作一个Q
过滤大小写敏感的对象:
from django.db.models import Q
data = ['harry-potter', 'Champak', 'Physics']
qfilter = Q(
*[Q(tags__name__iexact=item) for item in data],
_connector=Q.OR
)
Book.objects.filter(
qfilter
)
[ __iexact
Django-doc]将不区分大小写地与每个item
in匹配data
。
推荐阅读
- javascript - Javascript 无法更改 mydata 的值
- javascript - 使用 Cordova 的 Phaser 3 在浏览器版本中显示图像但在 iOS 版本中不显示
- javascript - Vetur Intellisense 在自定义组件道具上
- docker - Docker for Windows - 如何访问同一局域网上的外部主机
- r - 如何从网站上抓取信息
- api - 组合 api nuxt vuex 命名空间
- woocommerce-memberships - 如何访问 Woocommerce 会员资料字段数据并将其显示在前端?
- swift - SwiftUI,Firestore 获取一个集合并与另一个集合匹配
- kubernetes - Helm - 循环中的少量部署
- r - 使用Officer R包制作word文档A3和横向