1
votes

Django - Comment les utilisateurs peuvent-ils voir les livres sous son type d'abonnement?

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.


0 commentaires

3 Réponses :


-2
votes

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


1 commentaires

Cela ne semble pas du tout lié à la question.



4
votes

Vous pouvez le faire comme ceci:

{{ user.customer.membership.book_set.all }}

Explication:

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 ).


2 commentaires

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%}



2
votes

{{user.customer.membership.book_set.all}}


0 commentaires