如何从Django查询中获取唯一值
我有一个方法:如何从Django查询中获取唯一值,django,django-models,django-queryset,Django,Django Models,Django Queryset,我有一个方法: def get_netmask(user=None): user = User.objects.get(username=user) id_user = user.id obj = Host.objects.get(user=id_user) obj = obj.ipv4_sub_net.distinct('ipv4_sub_net').order_by('ipv4_sub_net') # In this line i am
def get_netmask(user=None):
user = User.objects.get(username=user)
id_user = user.id
obj = Host.objects.get(user=id_user)
obj = obj.ipv4_sub_net.distinct('ipv4_sub_net').order_by('ipv4_sub_net')
# In this line i am getting an error: `'unicode' object has no
# attribute 'distinct'` but the query is not complete . For full
# question please follow the lines and given example
return obj
主机模型的对象是ipv4\u sub\u net
和ipv6\u sub\u net
。我定义上述方法的目的是从与请求用户(登录用户)相对应的主机型号
字段中获取值。为此,我在调用时将reuest.user.username
传递给get\u netmask
参数。除此之外,我还想分别返回ipv4\u sub\u net
和ipv6\u sub\u net
中的count os类似条目
例如:
表中有四个结肠:
id user_id ipv4_sub_net ipv6_sub_net
1 2 1.0.0.1 /23
2 2 8.9.7.3 /23
3 1 23.2.3.4 /43
4 2 1.0.0.1 /23
因此,假设请求用户具有user\u id
2
。因此,根据方法定义,它将返回字典。字典的第一个索引包含唯一的IPv4\u sub\u net+ipv6\u sub\u net
,即“1.0.0.1”
和/23
第二个索引将返回ipv4的类似子网
的计数,第三个索引将返回ipv6的类似子网的计数,其中
2用于ipv4和
2用于ipv6`。尝试更改
obj = obj.ipv4_sub_net.distinct('ipv4_sub_net').order_by('ipv4_sub_net')
到
编辑
在第一次传球时,我错过了另一个错误。你也应该改变
obj = Host.objects.get(user=id_user)
到
get
将始终返回单个对象,如果返回多个对象,将抛出错误。如果您需要一个对象,那么我不确定您要做什么。它显示了一个错误,即“主机”对象没有“distinct”属性。主机*是一个模型,ipv4子网和ipv6子网是它的两个对象。错误是如此明显,但解决方法是什么?问题是什么?请说得更具体些
obj = Host.objects.get(user=id_user)
obj = Host.objects.filter(user=id_user)