我将此Django Blog App类别系统传递给django-mptt。
我遇到的问题是关于_get_online_category
方法。
此方法允许我仅获取具有Entry
的类别。
def _get_online_categories(self):
"""
Returns categories with entries "online" inside.
Access this through the property ``online_entry_set``.
"""
from models import Entry
return Category.objects.filter(entries__status=Entry.STATUS_ONLINE).distinct()
如何修改它以便我也有类别有条目的类别?
例如:
我有Spain > Malaga
而马拉加使用之前的方法获得了Entry
,我只会Malaga
而不是Spain
我希望同时拥有这两种方法。
第二个问题:
如何从父类别中获取所有条目?
例如,从西班牙获得马拉加的帖子?
def _get_online_entries(self):
"""
Returns entries in this category with status of "online".
Access this through the property ``online_entry_set``.
"""
from models import Entry
return self.entries.filter(status=Entry.STATUS_ONLINE)
online_entries = property(_get_online_entries)
这会返回西班牙的空结果。
答案 0 :(得分:0)
This看起来是第一种方式的好解决方案:
def _get_online_categories(self):
"""
Returns categories with entries "online" inside.
Access this through the property ``online_entry_set``.
"""
from models import Entry
queryset = self.categories.filter(entries__status=Entry.STATUS_ONLINE)
new_queryset = queryset.none() | queryset
for obj in queryset:
new_queryset = new_queryset | obj.get_ancestors()
return new_queryset
第二个问题
这样的事情会成功:
def _get_online_entries(self):
"""
Returns entries in this category with status of "online".
Access this through the property ``online_entry_set``.
"""
from models import Entry
return Entry.objects.filter(status=Entry.STATUS_ONLINE,
category__lft__gte=self.lft,
category__rght__lte=self.rght)
online_entries = property(_get_online_entries)