将字符串从Solr转换为int的Haystack

2024-10-06 07:35:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Solr中有一个字段,其中包含注册号,通常遵循以下格式:

"prop_33": "1923,1110.112"

句点后面的位数是可变的,但这实际上不是浮点,句点不代表小数点。在

编辑:“prop_33”的Solr字段类型是TextField

我使用Haystack来查询Solr,当我调用SearchResult.get_additional_fields()并从结果字典中获得reg number时,它将其视为int和float的元组。如果我调用str()来转换它,它将取整它认为是第二个数字的值并产生一些无意义的东西,例如:

^{pr2}$

因为这实际上不是一个数字,这对我的用户来说毫无意义。我如何从SearchResult中获得精确的字符串,而不将其转换为int列表?在

我还在学习干草堆和Django,所以我对这一切都有点陌生。在

编辑:这里是我查询Solr的地方:

_结果_对象.html-模板

<div id="collapsemed{{ obj.id }}" class="panel-collapse collapse">
    <table class="table table-striped">
        {% get_result_details result.get_additional_fields %}
    </table>
</div>

基地_标签.py-模板标记

@register.simple_tag    
def get_result_details(fields):
    rowhtml = ''

    for field, value in fields.items():
        if field.startswith('prop_'):
            prop_num = field[5:]
            try:
                prop = DescriptiveProperty.objects.get(id=prop_num)
                try:
                    row = '<tr><td>' + prop.property + '</td><td>' + value + '</td></tr>'
                except TypeError:
                    row = '<tr><td>' + prop.property + '</td><td>' + str(value) + '</td></tr>'              
                rowhtml += row
            except DescriptiveProperty.DoesNotExist:
                pass

    return rowhtml

更新:当Haystack从索引返回一个SearchQuerySet时,问题似乎就发生了。索引中的注册号是正确的,但是当我从控制台执行以下操作时:

>>> from haystack.query import SearchQuerySet
>>> s = SearchQuerySet().filter(prop_31 = 116565)
>>> s.values('prop_33')
[{'prop_33': (1923, 1110.1659999999999)}]

现在它变成了元组。有没有办法告诉Haystack把索引中的所有值都当作字符串处理???在

更进一步的更新:我尝试在架构.xml从“文本”到“字符串”没有什么区别。在

旧的架构.XML公司名称:

<dynamicField name="prop_*" type="text_en" indexed="true" stored="true"/>

新的架构.XML公司名称:

<dynamicField name="prop_*" type="string" indexed="true" stored="true"/>

在网页上和控制台上打印的结果相同。在


Tags: 字符串idtruefieldfieldsgetvaluetable