Django быстрый квест по созданию запросов для записей и категорий блога
У меня есть страница блога, показывающая все посты пользователя. У каждого поста есть "Категория".
(Ex: Post 1 --> категория: общее кодирование, Post 2 --> категория: общее кодирование, Post 3 --> категория: web dev)
Если я хочу показать все категории, в которых пользователь разместил свой пост
(Например: Просмотр списка страниц профиля пользователя--> Размещенные категории --> общее кодирование, веб-разработка )
, мне придется использовать "цикл for" и поместить их в список? Или есть лучший способ сделать это.
posts = user.post_set.all()
category_list = []
for post in posts:
if post.category not in category_list:
category_list.append(post.category)
models.py
class Category(models.Model):
category_name = models.CharField(max_length=50, default='general coding', verbose_name="Categories")
class Post(models.Model):
title = models.CharField(max_length=100, help_text="100 characters or less")
content = models.TextField()
category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
liked = models.ManyToManyField(Profile, blank=True, related_name='likes')
вы можете использовать .exclude()
. Я бы рекомендовал избегать прямого зацикливания
Еще лучше фильтровать напрямую с помощью чего-то вроде
(
Category.objects.filter(author_id=user.id) # filter by user
.exclude(category_name__iexact"category i want to exclude") # exclude other category from the list
.values_list("category_name", flat=True) # only return a list of category_names
)
Вы можете посмотреть django queryset apiдля получения дополнительной информации.