Django问题,异常值:朋友匹配查询不存在

时间:2019-01-11 09:53:40

标签: python django

我正在做一个Django博客网站项目。

我的一项功能是登录时,可以单击标签Other members来显示其他成员的列表;喜欢这张图片

like in this picture

但是,到目前为止,仅当我以一个特定帐户(即管理员)身份登录时,此功能才可用。当我以其他成员(不是admin)或另一个admin帐户登录时,该功能无法正常工作;这意味着当我点击标签Other Members时,它将显示类似错误

"Friend matching query does not exist"

Friend matching query does not exist.

我真的很困惑,被这个困扰。有什么解决方法的想法吗?

这是我的代码:

** list_users.html **

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

views.py 功能listusers

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)

model.py Friend

class Friend(models.Model):
    users = models.ManyToManyField(User)
    current_user = models.ForeignKey(User, related_name='owner', null=True, on_delete=models.CASCADE)

3 个答案:

答案 0 :(得分:1)

这是因为您正在使用get运算符来获取朋友。如您所提供的图像所示,问题出在视图的第25行。在以下方法中:

friend = Friend.objects.get(current_user=request.user)

您正在尝试获取不存在的商品。没有朋友,它是current_user是请求的用户。

您可以这样解决它:

friend = Friend.objects.filter(current_user=request.user).first()
if friend:
    friends = friend.users.all()
else: 
    friends = User.objects.none()

答案 1 :(得分:1)

尝试使用filter代替get。如果没有匹配结果,get就会引发异常。

看看filter

Friend.objects.filter(current_user=request.user).first()

答案 2 :(得分:1)

另一种方法是,如果用户没有Friend实例,则创建它。您可以为此使用get_or_create。例如:

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)