используя пользовательский контекстный процессор с моделью django mptt - PullRequest
0 голосов
/ 28 августа 2018

У меня есть модели с товаром и категорией. Категория является внешним ключом продукта, и Категория также сама относится к подкатегориям. чтобы получить набор запросов продуктов с категорией, имя которой содержит определенную строку, я думаю, что должен быть более умный способ, чем сделать это, как показано ниже (product__category__parent__parent__parent ...... __name__icontains)

может кто-нибудь посоветует лучший способ? Спасибо

models.py

class Product(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(unique=True, null=True, blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

class Category(MPTTModel):
    parent = TreeForeignKey('self', null=True, blank=True, 
    related_name='children', on_delete=models.CASCADE)
    name = models.CharField(max_length=100, unique=True)

    class MPTTMeta:
        order_insertion_by= ['name']

    def __str__(self):
        return self.name

    def trees(self):
        ancestors = self.get_ancestors(ascending=False, include_self=True)    
        return ' | '.join(category.name for category in ancestors)

context_processor.py

def filter_category(request):
    query = request.GET.get('fq', None)

    if query is not None:
        lookups = Q(category__name__icontains=query) | Q(category__parent__name__icontains=query)\
              | Q(category__children__name__icontains=query) | Q(category__parent__parent__name__icontains=query)
        results = Product.objects.select_related().filter(lookups)
    else:
        results = Product.objects.all()
    context = {
        'results': results
    }
    return context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...