Django показать страницу избранных карт пользователя - PullRequest
0 голосов
/ 15 января 2020

Это мой первый проект с Django, и я искал везде, но не нашел решения.

На моем сайте есть карточки, и я хочу, чтобы пользователь был в состоянии добавить в избранное карты, которые он хочет. Эта функция работает, но затем я хочу создать страницу, где он может видеть свои любимые карты. Вот моя проблема : мне удается отображать только избранные карточки всех пользователей. Когда я просто хочу аутентифицированных пользователей избранные карты . Вот мой код:

Это файл . html:

{% if user.is_authenticated %}
   {% for carte in carte_list %}
       {% if carte.favori.exists %}

           //code for my card

       {% endif %}
   {% endfor %}

{% endif %}

Это мой файл views.py :

class FavoriListView(generic.ListView):
    model = Carte

    template_name = '../templates/appli/favori_list.html'

    def get_context_data(self, *args, **kwargs):
        context = super(FavoriListView, self).get_context_data(*args, **kwargs)
        context['carte_list'] = Carte.objects.all()
        return context



class CarteDetailView(generic.DetailView):
    model = Carte

    template_name = '../templates/appli/carte_detail.html'

    def get_context_data(self, *args, **kwargs):
        context = super(CarteDetailView, self).get_context_data(*args, **kwargs)
        context['carte_list'] = Carte.objects.all()
        return context

    def get(self, request, *args, **kwargs):

        id = self.kwargs['pk']
        carte = get_object_or_404(Carte, id=id)
        est_favori = False

        if carte.favori.filter(id=request.user.profil.id).exists():
            est_favori = True
        else:
            est_favori = False

        context = {
            'carte': carte,
            'est_favori': est_favori
        }

        context['carte_list'] = Carte.objects.all()

        return render(request, '../templates/appli/carte_detail.html', context)

def carte_favori(request, id):
    carte = get_object_or_404(Carte, id=id)

    if carte.favori.filter(id=request.user.profil.id).exists():
        carte.favori.remove(request.user.profil)
    else:
        carte.favori.add(request.user.profil)

    return HttpResponseRedirect(carte.get_absolute_url())

(у меня тоже есть CarteListView)

Это файл models.py :

class Profil(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    //some others attributes

    def get_absolute_url(self):
        return reverse('profil', args=[str(self.id)])



class Carte(models.Model):
    titre = models.CharField(max_length=200, verbose_name='Titre')

    //some others attributes

    favori = models.ManyToManyField(Profil, blank = True)

    def __str__(self):
        return self.titre

    def get_absolute_url(self):
        return reverse('carte-detail', args=[str(self.id)])
...