如何从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)