Получение ошибки в Django: соответствующий запрос не существует - PullRequest
0 голосов
/ 26 сентября 2019

Итак, в основном у меня есть модель Friend, и в модели есть весь код, а затем в представлениях у меня также есть некоторый код для друзей, и я получаю эту ошибку

matching query does not exist.

Я перепробовал все решения, которые нашел в Интернете, однако ни одно из них не сработало, поэтому я пришел сюда, чтобы попытаться найти ответ.Используется последняя версия Django.

Соответствующий models.py

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

    @classmethod
    def make_friend(cls,current_user,new_friend):
        friend,created = cls.objects.get_or_create(
            current_user = current_user
        )
        friend.users.add(new_friend)

    @classmethod
    def lose_friend(cls,current_user,new_friend):
        friend,created = cls.objects.get_or_create(
            current_user = current_user
        )
        friend.users.remove(new_friend)

Это релевантный views.py Извините, если он немного длинный

class PostListView(SelectRelatedMixin,TagMixin,generic.ListView):
    model = Post
    template_name = 'mainapp/post_list.html'
    selected_related = ("user","group")
    queryset = models.Post.objects.all()

    def get(self,request):
        users = User.objects.exclude(id=request.user.id)
        friend = Friend.objects.get(current_user=request.user)
        friends = friend.users.all()

        context = {
            'users':users,'friends':friends
        }
        return render(request, self.template_name, context)

    def get_context_data(self,**kwargs):
        context = super(PostListView,self).get_context_data(**kwargs)
        context['user_groups'] = Group.objects.filter(members__in=[self.request.user.id])
        context['all_groups'] = Group.objects.all()
        return context

    def get_queryset(self):
        return Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')

def change_friends(request,operation,pk):
    friend = User.objects.get(pk=pk)
    if operation == 'add':
        Friend.make_friend(request.user,friend)
    elif operation == 'remove':
        Friend.lose_friend(request.user,friend)
    return redirect('mainapp:post_list')

Таким образом, настоящая ошибка происходит в методе get() со строкой friend = Friend.objects.get(current_user=request.user).

Вот файл urls.py.

#post list url

path('posts/',views.PostListView.as_view(),name='post_list'),
# connect url

path('connect/<operation>/<pk>',views.change_friends,name='change_friends'),

А вот соответствующий код в post_list.html

<p>People to connect with</p>
{% for user in users %}
<a href="#">
    <p>{{ user.username }}</p>
</a>
{% if request.user.is_authenticated %}
<p>Friends</p>
{% for friend in friends %}
<a href="#">
    <p>{{ friend.username }}</p>
</a>
{% endif %}

Я не уверен, почему я получаюэта ошибка, и все решения в Интернете не решили эту проблему.

Я не ожидаю ошибок, и пользователи и друзья будут работать должным образом, однако это не так, и я получаю эту ошибку.Спасибо за любую помощь, которую вы можете оказать:)

...