Поиск уникальных значений в django
Я начинающий пользователь Django. Мой вопрос заключается в следующем, Как я могу получить все уникальные названия категорий в search_result?
Мой models.py
class Category(models.Model):
category_name = models.CharField(max_length=20, unique=True)
logo = models.ImageField(upload_to='Category')
slug = models.SlugField(unique="True")
def __str__(self):
return self.category_name
class Product(models.Model):
product_name = models.CharField(max_length=50, blank=False)
category = models.ForeignKey(Category, on_delete=models.CASCADE, default="", blank=True, related_name="Products")
price = models.FloatField(blank=False, default=0.00, validators=[MinValueValidator(0.0)], help_text='Price Can not be Less than Zero.')
def __str__(self):
return self.product_name
Мой views.py
class SearchView(TemplateView):
template_name = "productstemplate/products.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
user_search = self.request.GET['product']
search_result = Product.objects.filter(Q(product_name__icontains=user_search) |
Q(category__category_name__icontains=user_search))
context['products'] = search_result
context['categorys'] = ===>> Here <<===
return context
Вы можете создать список, содержащий все значения category_name, затем отобразить его в set, а затем снова в list.
category_name_list = [e.category__category_name for e in search_result]
context['categorys'] = list(set(category_name_list))
Другим подходом может быть написание нового запроса с использованием метода distinct():
context['categorys'] = Product.objects.filter(Q(product_name__icontains=user_search) |
Q(category__category_name__icontains=user_search)).values_list('category__category_name', flat=True).distinct()
Почему бы не создать список, содержащий значения category_name, а затем снова вывести его в список? Наш друг, который оставил этот комментарий, я также согласен, и я думаю, что ваша проблема будет полностью решена попробуйте еще раз!