1

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

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 是解决这个问题的正确方法,并且无法弄清楚如何让它发挥作用......)

4

1 回答 1

1

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

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

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

于 2021-04-29T17:48:26.617 回答