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для получения дополнительной информации.

Вернуться на верх