gpt4 book ai didi

python - 在 MultiSelectField 中按一位数过滤

转载 作者:行者123 更新时间:2023-12-04 07:47:56 25 4
gpt4 key购买 nike

我有 MyModel :

class MyModel(models.Model):
ELEMENTS_CHOICES = Choices(
(1, 'element1'),
(2, 'element2'),
(3, 'element3'),
(4, 'element4'),
(10, 'element10'),
(12, 'element12'),
)
elements = MultiSelectField(
_('elements'),
choices=ELEMENTS_CHOICES,
blank=True,
)
我也有一些 MyModel对象 elements值如下:
obj1.elements = ['1', '2', '3', '10', '12']
obj2.elements = ['1', '3', '10', '12']
obj3.elements = ['1', '3', '10']
obj4.elements = ['2']
如何过滤此字段值?
我尝试使用的过滤器是:
search_id = 2
MyModel.objects.filter(elements_icontains=search_id)
之前两位数出现在 MyModel中就OK了场选择。
现在它返回 obj1 , obj2 (因为 12 在列表中,其中包含 2 个)和 obj4 .
我只想用 2 搜索值号码并获得 obj1obj4作为结果。目前,结果是包含 2 的对象。和 12 .
过滤此字段的正确方法是什么?

最佳答案

将数据作为逗号分隔的列表存储在数据库中并不是一种很好的技术,通常不建议这样做。您的用例本身意味着您正面临这个问题。如果可行,您应该重新设计模型架构( 推荐 )并使用 ForeignKeyManyToManyField以实现您的目标。
如果不幸由于某种原因无法更改此架构,您只能解决使用正则表达式来查询您的数据库:

import re


search_id = 2
filter_term = r'\b%s\b' % re.escape(str(search_id)) # \b is word boundary in regex
MyModel.objects.filter(elements__iregex=filter_term)

关于python - 在 MultiSelectField 中按一位数过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67123187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com