Je veux que deux modèles de différentes applications soient rendus dans un modèle. Par exemple, dans ma page d'accueil, il existe une liste de postes montrant l'auteur post-auteur et post du contenu en conséquence. Lorsque je cliquerai sur l'étiquette de l'auteur, je souhaite afficher le profil d'auteur en haut et liste des messages de cet auteur ci-dessous. J'utilise la vue de la classe (ListView andd DétachantView). Dans mon "application des utilisateurs", j'ai un modèle de profil et dans "blog app 'j'ai un modèle postal.
blog/models.py class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() date_posted = models.DateTimeField(default=timezone.now) author = models.ForeignKey(User, on_delete=models.CASCADE) def __str__(self): return self.title def get_absolute_url(self): return reverse('post-detail', kwargs={'pk': self.pk}) users/models.py class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) image = models.ImageField(default='default.jpg', upload_to='profile_pics') phone = models.CharField(max_length=10, blank=True) def __str__(self): return f'{self.user.username} Profile' users/views.py class ProfileDetailView(DetailView): model = Profile # to get two model in one page def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['posts'] = Post.objects.all() return context my template <div class=""> <legend class="border-bottom mb-4">Profile Info</legend> <div class="media"> <img class="rounded-circle account-img" src="{{ object.image.url }}"> <div class="media-body"> <h2 class="account-heading">{{object.user.username}}</h2> <p class="text-secondary">{{object.user.email}}</p> <p class="text-secondary">{{object.user.profile.phone}}</p> </div> </div> </div> <div class=""> <legend class="border-bottom mb-4">User's Posts</legend> <h2 class="account-heading">{{?????}}</h2> <p class="text-secondary">{{??????}}</p> </div> urls.py path('profile/<int:pk>/', views.ProfileDetailView.as_view(), name='profile-detail'),
4 Réponses :
Vous devez étendre votre modèle utilisateur et ajouter une méthode get_absolute_url (), qui retournera un relativement ou un chemin absolu à votre clé d'auteur à la clé étrangère pendant le poste de rendu.
Voir les documents officiels Django: https://docs.djangoproject.com/fr/ 2.2 / ref / modèles / instances / # django.db.models.model.get_absolute_url p>
depuis v1.7 ( Voir Notes de version ) En conséquence, vous devez créer le Cela peut être fait soit via un modèle utilisateur personnalisé strong> comme Dotslash227 suggère dans sa réponse , ou en ajoutant le éther façon de vous pouvez Pour ce dernier cas, la partie de réglage peut ressembler à quelque chose comme: P> django.contrib.auth.models.abstractUser code> ne définit plus un
get_absolute_url () code> méthode.
get_absolute_url code>
Méthode pour votre modèle d'utilisateur afin que vous puissiez utiliser {{user.get_aboslute_url}} code> dans vos modèles. p>
absolu_url_overrides code >
à vos paramètres strong>, qui pourrait être un peu plus simple. p> {{user.get_aboslute_url}} code> dans votre modèle (plus Comme
{{chacun.author.get_absolute_url}} code> dans votre cas). p>
ABSOLUTE_URL_OVERRIDES = {
'auth.user': lambda u: "/users/%s/" % u.username,
}
Vous pouvez accéder à l'utilisateur actuel de votre Par conséquent pour obtenir des messages d'utilisateur spécifiques, c'est ce que vous pourriez rechercher - P>
au lieu de strong> p>
Cela devrait vous donner les messages de l'utilisateur actuel. Faites-moi savoir si vous avez besoin de clarification avec n'importe quoi. P> DétacherView CODE> Classe à l'aide de
Self.Request.user Code> P>
contexte ['message'] = posts.ObjectS.filter (auteur = auto.Erquest.user) code> Depuis que l'auteur est une clé étrangère pointant vers le modèle d'utilisateurs. P>
contexte ['message'] = post.Object.all () code> p>
semble fonctionner. Mais maintenant, le problème est-il de retour d'article juste de l'utilisateur connecté. Par exemple, je suis un utilisateur d'un utilisateur qui affiche des messages d'un utilisateur un utilisateur, même si je sélectionne d'autres messages d'utilisateurs. Si l'utilisateur B connecté, il affiche les messages d'utilisateur B pour tous les utilisateurs
Cherchez-vous à créer un filtre utilisateur, indépendamment de l'utilisateur actuellement connecté? J'ai supposé que vous essayez d'afficher les postes d'utilisateurs actuels connectés.
Oui, je veux créer un filtre par utilisateur, quel que soit l'utilisateur actuellement connecté
merci rohit. J'ai géré mon problème. Votre réponse était un indice. Contexte ['Posts'] = post.ObjectS.filter (auteur = self.Object.user)
Finalement j'ai eu ma réponse. Merci à tous ceux qui ont essayé de m'aider. Problème était en interrogation. Commentaire de Rohit Keshav a été une allusion à mon problème. Voici le code:
users/views.py class ProfileDetailView(DetailView): model = Profile # to get two model in one page def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['posts']=Post.objects.filter(author=self.object.user) return context
Bonjour, "Comment faire des requêtes pour obtenir des messages d'un utilisateur sélectionné / cliqué." - Votre question ou cette question est-elle - "Je veux que deux modèles de différentes applications soient rendus dans un modèle"?
Je veux que cette requête soit exécutée lorsque je sélectionne cet utilisateur dans un modèle différent