Это мой первый проект с 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)])