Django正在从queryset返回的字典列表中搜索字符串匹配。

2024-10-04 07:31:02 发布

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

我有这样的东西在我的视图.py在

def calculateMark(mobile_a, mobile_b):
    #variables
    mobile_a = mobile_a
    mobile_b = mobile_b

    results_a = []
    results_b = []
    record_a = TechSpecificationAdd.objects.filter(mobile_name=mobile_a).values()
    record_b = TechSpecificationAdd.objects.filter(mobile_name=mobile_b).values()
    results_a += record_a
    results_b += record_b
    record_a = record_a[0]
    record_b = record_b[0]

    if 'Android' in record_a['os']:
        os_mark_a = 8.9
    elif 'Android' in record_b['os']:
        os_mark_b = 8.9
    elif 'iOS' in record_a['os']:
        os_mark_a = 14
    if 'iOS' in record_b['os']:
        os_mark_b = 14
    else:
        os_mark_a = 1
        os_mark_b = 1

calculateMark函数将为手机计算一个标记。一切正常,但在操作系统(os)测试的情况下。它总是返回else块。在

问题是如何在我的record['os']字段中搜索类似“ios”的字符串?在


Tags: nameinifobjectsosmobilefilterrecord
1条回答
网友
1楼 · 发布于 2024-10-04 07:31:02

如果我错了,请纠正我,但我相信您的问题是if在以下行中:

if 'iOS' in record_b['os']:

在这种情况下,{cd2}和1覆盖。要更正此特定问题,请将行更改为:

^{pr2}$

我还发现了一些奇怪的事情:

  • 在大多数情况下,只需设置os_mark_bos_mark_a中的一个,离开 另一个不稳定。例如,您可以通过设置来更正此问题 两者都要先设置为默认值。

  • 不需要使用values()将值加载到字典中,只需使用.get()并直接使用结果对象。除其他好处外,这将完全消除第6、7、10、11、12、13行。

  • A和B的计算似乎完全分开了。创建一个calucaltes为单个对象标记的更小的方法似乎更明智。

  • 您的方法不返回任何内容。我想这只是因为这是一个简化的例子。

  • 下面的代码是关于什么的?那没用。。。在

    mobile_a = mobile_a
    mobile_b = mobile_b
    

更新:没有这些问题的代码示例:

def calculateMark(mobile):
    record = TechSpecificationAdd.objects.get(mobile_name=mobile)

    if 'Android' in record.os:
        return 8.9
    if 'iOS' in record.os:
        return 14
    return 1

更新2:另外,由于我们已经在改进代码方面取得了进展-这不应该是一个单独的函数,而是TechSpecificationAdd对象上的一个方法。在

class TechSpecificationAdd(models.Model):
    # some fields

    def calculateMark(self):
        if 'Android' in self.os:
            return 8.9
        if 'iOS' in self.os:
            return 14
        return 1

然后在代码中使用如下:

record = TechSpecificationAdd.objects.get(mobile_name=mobile)
mark = record.calculateMark()

相关问题 更多 >