Как отобразить список избранных topic, а не только одного? Всех тем, которых я добавил в избранное. И как их удалить?

Для отображения списка избранных topic в Django, вам потребуется две модели - одна для представления пользователей и другая для представления topic. В модели User, вы можете добавить поле ManyToManyField для связи с моделью Topic, чтобы хранить список избранных topic для каждого пользователя.

Ниже приведен пример кода:

from django.db import models
from django.contrib.auth.models import User

class Topic(models.Model):
    title = models.CharField(max_length=100)
    # Другие поля для представления topic

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    favorite_topics = models.ManyToManyField(Topic)

Добавление topic в список избранных для определенного пользователя может быть выполнено с помощью метода add модели ManyToManyField. Например:

def add_favorite_topic(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    user_profile = UserProfile.objects.get(user=request.user)
    user_profile.favorite_topics.add(topic)

Теперь, чтобы отобразить список всех избранных topic для пользователя, вы можете получить объект UserProfile для текущего пользователя и обращаться к полю favorite_topics. Например:

def favorite_topics_list(request):
    user_profile = UserProfile.objects.get(user=request.user)
    favorite_topics = user_profile.favorite_topics.all()
    return render(request, 'favorite_topics.html', {'favorite_topics': favorite_topics})

В соответствующем шаблоне (favorite_topics.html) вы можете использовать цикл для отображения каждого избранного topic:

<ul>
  {% for topic in favorite_topics %}
    <li>{{ topic.title }}</li> <!-- Например, отображение заголовка topic -->
  {% endfor %}
</ul>

Чтобы удалить topic из списка избранных, вы можете использовать метод remove модели ManyToManyField. Например:

def remove_favorite_topic(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    user_profile = UserProfile.objects.get(user=request.user)
    user_profile.favorite_topics.remove(topic)

Надеюсь, это помогло вам понять, как отобразить список избранных topic и как их удалить в Django.