Py学习  »  问与答

新手有个问题想请教一下

vurtne • 8 年前 • 1902 次点击  

比如网站有一个新闻版块,里边的新闻分了很多分类,现在要在一个页面上显示所有分类并且显示分类下的最新一条新闻,查询应该怎么写呢? 模型类似于这样:

class Category(models.Model):
    name = models.Charfield()
class News(models.Model):
    title = models.Charfield()
    cat = models.ForeignKey(Category)
    date = models.DatetimeField()
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1310
 
1902 次点击  
文章 [ 3 ]  |  最新文章 8 年前
MCC
Reply   •   1 楼
MCC    8 年前

如果自己拼sql mysql就

select * from (
    SELECT * FROM test.sleep_news order by -date)
as Subquery group by cat_id;

其他如果有with的就更好弄了,写得可以更美一些。

要是不在乎查询多次的话直接

results = {}
    Categories = Category.objects.all()
    for category in Categories:
        news = News.objects.filter(cat=category).order_by('-date')[0]
        results[category] = news

有些云服务居然是用查询sql次数来收费的我就不吐槽了。。

rapospectre
Reply   •   2 楼
rapospectre    8 年前
news_list = News.objects.distinct('cat__name')

如果是bakend数据库是mysql数据库,改为这样写:

news_list = News.objects.values('cat__name').distinct()

如果用sqlite或者postgresql用第一种写法没有问题。

MCC
Reply   •   3 楼
MCC    8 年前
results = News.objects.all().order_by('cat', '-date').annotate(Count('cat'))
    items = {}
    for result in results:
        print result.cat,result.title
        if not result.cat in items:
            items[result.cat] = result

distinct不太好用,就这样将就了……或者不要应用django的orm 自己拼sql或者SQLAlchemy