【问题标题】:django models distinct is still returning duplicatesdjango 模型 distinct 仍然返回重复项
【发布时间】:2021-07-23 02:52:35
【问题描述】:

我很难过......这可能很明显,但我似乎无法区分此处删除重复项

q = SubscriberPhoneNumber.objects.values_list('phone_number',flat=True).order_by('phone_number').distinct('phone_number')
print(q)
<QuerySet ['9711231234', '5095551212', '9994441212', '9994441212', '9711231234']>

如您所见,9711231234 出现了两次(9994441212 也是如此)(注意这些不是真实的电话号码...)

这是模型

class SubscriberPhoneNumber(models.Model):
    subscriber = models.ForeignKey(SystemStatusSubscriber, on_delete=models.CASCADE)
    phone_number = EncryptedCharField(max_length=24, **null)
    country_code = models.CharField(max_length=8, default='+1')

我觉得我失去了理智......并且不明白为什么 distinct 没有消除重复项(我真的想在 country_codephone_number 上有所不同,但只是包括 phone_number 以简化问题)(我也不需要 values_list 但认为这可能有助于仅选择我感兴趣的列)

(请注意,我当然可以将结果转换为 set 以获得唯一值...但我觉得 distinct 是解决此问题的正确方法,并且无法弄清楚如何使其工作...)

【问题讨论】:

    标签: python django postgresql django-models


    【解决方案1】:

    您的phone_number 字段是EncryptedCharField,我假设您使用这个包:django-cryptographic-fields。正如它在其存储库自述文件中所述:

    由于加密数据的性质,按包含的值进行过滤 在加密字段中将无法正常工作。排序也不行 支持。

    这就是您的独特甚至订购不起作用的原因(['9711231234', '5095551212', '9994441212', '9994441212', '9711231234'] 未订购)。一般来说,加密某些东西并期望在它们上面制作这样的过滤器等没有多大意义,如果你真的想做这种事情,请切换到普通的CharField

    【讨论】:

    • derp :) 谢谢...我认为这很明显...我只是错过了 :) 非常感谢 :)
    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 2021-04-09
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2016-04-13
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多