【发布时间】:2009-08-12 12:07:24
【问题描述】:
假设以下模型:
class Category(models.Model):
related = models.ManyToManyField('self', symmetrical = False, through = 'CategoryRelation', null = True, blank = True)
假设以下中间“通过”关系:
class CategoryRelation(models.Model):
source = models.ForeignKey('Category', null = False, blank = False, verbose_name = _('source'), related_name = 'relation_source')
target = models.ForeignKey('Category', null = False, blank = False, verbose_name = _('target'), related_name = 'relation_target')
order = models.PositiveIntegerField(_('order'), null = False, blank = True, default = 0)
class Meta:
ordering = ( 'order', )
如何在保留排序的同时获取与给定类别相关的类别对象?以下代码将生成正确的类别对象,但顺序不正确,即使使用.distinct(),也会在查询集中包含重复条目:
relations = CategoryRelation.objects.filter(source = self)
Category.objects.filter(relation_target__in = relations).order_by('related')
【问题讨论】:
标签: django recursion many-to-many sql-order-by