小写字段值 django 模型查询集
Lowercase Field values django models queryset
我有一个对象的模型,并且为该模型的对象分配了几个标签。标签可以是大写、小写或两种情况的混合。
我想编写一个查询集,它将 return 那些具有与我提供的相同标签的对象。
注意:我使用的是 django-taggit 模块。
Views.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")
Models.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)
现在我想 return 所有标签为 'HArry-Potter'、'HARRY-POTTER' 或任何其他词的书籍。
PS:如果我们能降低 'tags__name__in' 列表,我们的工作就完成了。
您可以创建一个 Q
对象,在其中过滤大小写 对 敏感:
from django.db.models import <strong>Q</strong>
data = ['harry-potter', 'Champak', 'Physics']
qfilter = Q(
*[<strong>Q(tags__name__iexact=item)</strong> for item in data],
_connector=Q.OR
)
Book.objects.filter(
<strong>qfilter</strong>
)
__iexact
[Django-doc] 将不区分大小写地与 data
中的每个 item
匹配。
在谷歌搜索和研究文档后,我得到了这个答案,它完成了我的工作
tag_re = '(' + 'pipe|seperated|list|of|tags' + ')'
Book.filter(tags__name__iregex=rf'{tag_re}').distinct()
我有一个对象的模型,并且为该模型的对象分配了几个标签。标签可以是大写、小写或两种情况的混合。
我想编写一个查询集,它将 return 那些具有与我提供的相同标签的对象。
注意:我使用的是 django-taggit 模块。
Views.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")
Models.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)
现在我想 return 所有标签为 'HArry-Potter'、'HARRY-POTTER' 或任何其他词的书籍。
PS:如果我们能降低 'tags__name__in' 列表,我们的工作就完成了。
您可以创建一个 Q
对象,在其中过滤大小写 对 敏感:
from django.db.models import <strong>Q</strong>
data = ['harry-potter', 'Champak', 'Physics']
qfilter = Q(
*[<strong>Q(tags__name__iexact=item)</strong> for item in data],
_connector=Q.OR
)
Book.objects.filter(
<strong>qfilter</strong>
)
__iexact
[Django-doc] 将不区分大小写地与 data
中的每个 item
匹配。
在谷歌搜索和研究文档后,我得到了这个答案,它完成了我的工作
tag_re = '(' + 'pipe|seperated|list|of|tags' + ')'
Book.filter(tags__name__iregex=rf'{tag_re}').distinct()