首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用django在mysql数据库上使用DISTINCT

用django在mysql数据库上使用DISTINCT
EN

Stack Overflow用户
提问于 2014-01-28 15:43:51
回答 1查看 7.2K关注 0票数 2

我一直在尝试(失败)生成一个查询,该查询省略了模型中的结果,而不必创建第二个数据库。

代码语言:javascript
复制
pmrs.models.LootTable

class LootTable(models.Model):
    boss = models.CharField(max_length=255)
    itemid = models.IntegerField()
    itemname = models.CharField(max_length=255)
    wfflag = models.BooleanField(help_text="Set true if warforged")

这就是模型的布局。我想得到的是老板字段中的所有内容的列表,然后省略重复的内容。

我尝试过各种不同的方法,.value_list,.values,order_by.().distinct等等,但是似乎没有什么效果。

使用以下内容

代码语言:javascript
复制
bosses = LootTable.objects.values('boss').distinct()

返回

代码语言:javascript
复制
[{'boss': u'Thok the Bloodthirsty'}, {'boss': u'Ordos'}, {'boss': u'Paragons of the Klaxxi'}, {'boss': u'Ordos'}, {'boss': u'Spoils of Pandaria'}, {'boss': u'Spoils of Pandaria'}, {'boss': u'Galakras'}, {'boss': u'General Nazgrim'}, {'boss': u'Ordos'}, {'boss': u'Spoils of Pandaria'}, {'boss': u'Siegecrafter Blackfuse'}, '...(remaining elements truncated)...']

正如您从结果中看到的那样,它正在返回重复项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 16:36:22

你真的应该花时间把你的模型类的相关模式放在这个问题上。在现实中,把它浓缩成你想要做的事情似乎节省了一些时间,这就使得你很难精确地计算出你想要做的事情。

根据你所写的,

代码语言:javascript
复制
q = LootTable.objects.values('boss').distinct()

应该能正常工作。如果没有,那么其他什么地方就不对劲了。

顺便说一句,老板不应该只有一张战利品桌吗?你为什么要做distinct呢?事实上,看看这个模型,如果我明白你想做什么的话(这并不能保证我会这么做!)我能发现有很多问题可能会让你心烦意乱,即:

( a)你为什么有一个LootTable表?同样的功能可以通过BossItem之间的多对多外键来实现。

( b)为什么LootTable上同时有item_id和item_name?为什么不把项目作为Item模型的外键呢?(即适当标准化的数据)

c)如果它只指向一个Item,它如何成为一个表?:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21410175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档