Je fais un projet de site Web de blog Django .
Une de mes fonctionnalités est lorsque vous vous connectez, vous pouvez cliquer sur l'onglet Autres membres pour afficher vous une liste des autres membres; comme cette image
.
Cependant, à partir de maintenant, cette fonctionnalité ne fonctionne que lorsque je me connecte en tant que compte spécifique qui est un administrateur. Lorsque je me connecte en tant qu'autres membres (pas l'administrateur) ou un autre compte administrateur, la fonctionnalité ne fonctionne pas; cela signifie que lorsque je clique sur l'onglet Autres membres , des erreurs telles que
class Friend(models.Model):
users = models.ManyToManyField(User)
current_user = models.ForeignKey(User, related_name='owner', null=True, on_delete=models.CASCADE)
Je suis vraiment confus et je reste bloqué sur celui-ci. Des idées pour le résoudre?
Voici mon code:
** list_users.html **
def listusers(request):
posts = Post.objects.all().order_by()
users = User.objects.exclude(id=request.user.id)
friend = Friend.objects.get(current_user=request.user)
friends = friend.users.all()
context = {
'posts': posts, 'users': users, 'friends': friends
}
return render(request, 'blog/list_users.html', context)
views.py function listusers
{% extends "blog/base.html" %}
{% block content %}
<div class="container">
<div class="col-sm-6">
<h2>Other People</h2>
{% for user in users %}
<a href="{% url 'view_profile_with_pk' pk=user.pk %}">
<h3>{{ user.username }}</h3>
</a>
{% if not user in friends %}
<a href="{% url 'change_friends' operation='add' pk=user.pk %}">
<button type="button" class="btn btn-success">Add Friend</button>
</a>
{% endif %}
{% endfor %}
</div>
<br>
<div class="col-sm-6">
<h2>Friends</h2>
{% for friend in friends %}
<a href="{% url 'view_profile_with_pk' pk=friend.pk %}">
<h3>{{ friend.username }}</h3>
</a>
<a href="{% url 'change_friends' operation='remove' pk=friend.pk %}">
<button type="button" class="btn btn-default">Remove Friend</button>
</a>
{% endfor %}
</div>
</div>
{% endblock content %}
model.py classe Friend code >
"Friend matching query does not exist"
3 Réponses :
C'est parce que vous utilisez l'opérateur get pour obtenir l'ami. Le problème, comme le montre l'image que vous avez fournie, est à la ligne 25 de vos vues. dans la méthode ci-dessous:
friend = Friend.objects.filter(current_user=request.user).first()
if friend:
friends = friend.users.all()
else:
friends = User.objects.none()
vous essayez d'obtenir un élément qui n'existe pas. Il n'y a aucun ami dont l'utilisateur actuel est l'utilisateur demandé.
vous pouvez résoudre le problème comme ceci:
friend = Friend.objects.get(current_user=request.user)
Je suggère d'ajouter la méthode call .first () à Friend.objects.filter (current_user = request.user) pour que cela fonctionne correctement.
Merci pour votre réponse. Je le corrige comme votre réponse mais cela me donne une autre erreur AttributeError at / listusers / 'UserManager' object has no attribute 'NONE'
ce devrait être User.objects.none ()
désolé c'était une erreur
Merci ça marche maintenant. Merci à tous de m'avoir aidé à résoudre ce problème, j'apprécie vraiment.
Essayez d'utiliser filter au lieu de get . get lève une exception lorsqu'il n'y a pas de résultat correspondant.
Jetez un œil à filter
Friend.objects.filter(current_user=request.user).first()
Merci pour votre réponse. Après avoir changé friend = Friend.objects.get (current_user = request.user) en friend = Friend.objects.filter (current_user = request.user) .first () comme votre réponse, cela me donne une autre erreur: AttributeError at / listusers / L'objet 'NoneType' n'a pas d'attribut 'users'
Vous devez vérifier si l'ami n'est pas Aucun avant d'accéder aux amis.
Une autre approche consiste à créer une instance Friend si un utilisateur n'en possède pas. Vous pouvez utiliser get_or_create pour cela. Par exemple:
users = User.objects.exclude(id=request.user.id)
friend, created = Friend.objects.get_or_create(current_user=request.user) # or have other necessary fields for Friend field
friends = friend.users.all()
context = {
'posts': posts, 'users': users, 'friends': friends
}
return render(request, 'blog/list_users.html', context)
Pouvez voir votre modèle ami?