2016-11-22 3 views
5

У меня есть следующий Джанго модель:Джанго: Запрос самостоятельно ссылающиеся объекты без дочерних элементов

class Category(models.Model): 
    name = models.CharField(maxlength=20) 
    parent = models.ForeignKey('self', null=True) 

Обратите внимание, что поле parent является самостоятельной ссылкой т.е. категории может иметь родитель.

Как найти все Category объектов, которые не имеют дочерних категорий?

ответ

6

Вы можете использовать isnull с related_query_name:

class Category(models.Model): 
    # ... 
    parent = models.ForeignKey('self', null=True, related_name='children', related_query_name='child') 

Category.objects.filter(child__isnull=True) 

Здесь я бы рекомендовал определить по крайней мере, содержательный related_name! Если вы указали только related_name, то related_query_name по умолчанию использует это имя (здесь: children). Если вы не укажете ни один из этих двух, rqn по умолчанию к названию модели: category, неcategory_set

Category.objects.filter(category__isnull=True) # not so informative 
+0

Я использовал 'Category.objects.filter (children__isnull = True)' и это прекрасно работает. Благодарю. – Frankline

Смежные вопросы