J'ai configuré des abonnements pour les utilisateurs afin qu'ils puissent avoir la possibilité d'afficher des livres sélectionnés sous un certain type d'abonnement. Dans ce cas, comment un utilisateur peut-il voir la liste des livres sous son type d'adhésion dans sa page de profil?
Voici mes codes pour les livres:
def profile(request):
```some update profile post code here```
context = {
'u_form': u_form,
'p_form': p_form
}
return render(request, 'users/profile.html', context)
Voici pour le modèles d'adhésion:
class Membership(models.Model):
membership_type = models.CharField(max_length=50)
price = models.IntegerField(default=100)
description = models.CharField(max_length=200)
def __str__(self):
return self.membership_type
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
membership = models.ForeignKey(Membership, on_delete=models.CASCADE, null=True)
reference = models.CharField(max_length=50, null=True)
def __str__(self):
return self.user.email
Et voici la vue du profil:
class Book(models.Model):
``` some book fields```
activeReference = models.ManyToManyField(Membership) #here's where membership connects````
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('book-detail', kwargs={'slug': self.slug})
Je m'attends à ce que l'utilisateur consulte tous ses livres sous son type d'abonnement.
3 Réponses :
créer un nouveau fichier de modèle pour afficher tous les livres, utiliser la fonction ListView in view et appeler le fichier de modèle en tant que template = 'template_name' et également importer un modèle
Cela ne semble pas du tout lié à la question.
Vous pouvez le faire comme ceci:
{{ user.customer.membership.book_set.all }}
Ici, dans le modèle, vous pouvez accéder à l'instance User par {{user}} s'il est connecté. Ensuite, vous pouvez accéder à l'instance customer car elle a OneToOne relation avec CustomerModel . Membership est un modèle FK à Membership . Enfin, vous pouvez accéder aux instances de livre via relation inverse ( book_set ).
Merci pour ton explication. Y a-t-il de toute façon que je puisse le mettre dans une boucle for pour que l'utilisateur puisse le voir comme une liste connectée à l'url absolue du livre?
Bien sûr {% pour le livre dans user.customer.membership.book_set.all%} {{book.get_absolute_url}} {% enfor%}
{{user.customer.membership.book_set.all}}