Django исключает запросы на дружбу

Я делаю приложение для социальных сетей и хочу сделать систему друзей. Вот код:

Models.py

class Requests(models.Model):
    name = models.CharField(max_length=200)
    friend = models.CharField(max_length=200)
    answer = models.CharField(max_length=200,blank=True)
    def __str__(self):
        return self.name

Html

<div class='form'>
    <form action='' method='post'>
        {%csrf_token%}
        <input type='text' class='form-control' name='name'>
        <button name='first' style='margin-top:20px;' class='btn btn-primary btn-lg'>Search</button>
    </form>
</div>
{%if messages%}
    {%for msg in messages%}
        <div class='user' style='margin-top:50px;margin-left:310px;'>
            <form action='' method='post'>
                {%csrf_token%}
                <img style='width:70px;height:70px;border-radius:15px;' src='/media/{{msg.extra_tags}}'></img>
                <p style='color:white;margin-left:5px;font-size:18px;display:inline-block;'>{{msg}}</p>
                <input type='hidden' name='name2' value='{{msg}}'>
                <button name='second' style='margin-left:10px;' class='btn btn-primary' onclick='myfuc()'>Send</button>
            </form>
        </div>
    {%endfor%}
{%endif%}

Views.py

def friends(request):
    if request.method == 'POST':
        if 'first' in request.POST:
            name = request.POST['name']
            users = User.objects.filter(username__startswith=name).all()
            if not users:
                pass
            else:
                for i in users:
                    messages.info(request,i.username,extra_tags=i.profile.profpic)
        if 'second' in request.POST:
            name2 = request.POST['name2']
            request5 = Requests.objects.filter(name=request.user.username,friend=name2).first()
            if request5:
                pass
            else:
                requests3 = Requests(name=request.user.username,friend=name2)
                requests3.save()
    return render(request,'requested.html')

Я хочу, чтобы каждый раз, когда пользователь делает запрос на дружбу, пользователь исключался из messages.info(request,i.username,extra_tags=i.profile.profpic) и не появлялся, когда пользователь снова ищет. Пожалуйста, помогите мне.

Спасибо.

Вероятно, в вашем шаблоне и даже в ваших моделях есть много проблем. Я попытаюсь дать вам возможное решение: Прежде всего, вы не можете сделать несколько POST форм в вашем шаблоне или вы должны указать url в вашем шаблоне. Кроме того, если вы хотите просто найти что-то, я предлагаю вам использовать GET форму. Если вы хотите исключить из поиска пользователя, который уже искал, вам также следует добавить поле boolean в вашу модель пользователя (я не знаю, используете ли вы собственную пользовательскую модель пользователя или встроенную). Итак, я напишу вам, каким был бы мой подход. models.py

class Requests(models.Model):
    name = models.CharField(max_length=200)
    friend = models.CharField(max_length=200)
    answer = models.CharField(max_length=200,blank=True)
    def __str__(self):
        return self.name

class User(models.Model or inherith from AbstractUser or whatever):
    #whatever fields you have
    friend_request = models.BooleanField(default=False)

html:

    <div class='form'>
    <form action='' method='get'> <!-- Here you should use a get request if you want make a search -->
        <input type='text' class='form-control' name='name'>
        <button name='first' style='margin-top:20px;' class='btn btn-primary btn-lg'>Search</button>
    </form>
</div>
    {%if messages%}
        {%for msg in messages%}
            <div class='user' style='margin-top:50px;margin-left:310px;'>
                <form action='' method='post'>
                    {%csrf_token%}
                    <img style='width:70px;height:70px;border-radius:15px;' src='/media/{{msg.extra_tags}}'></img>
                    <p style='color:white;margin-left:5px;font-size:18px;display:inline-block;'>{{msg}}</p>
                    <input type='hidden' name='name2' value='{{msg}}'>
                    <button name='second' style='margin-left:10px;' class='btn btn-primary' onclick='myfuc()'>Send</button>
                </form>
            </div>
        {%endfor%}
    {%endif%}

Теперь, вместо того, чтобы иметь одно представление для обработки многих вещей, я бы разделил его на 2 разных представления: 1 для обработки get или post запроса, а другой для рендеринга шаблона. Однако вы можете просто работать с одним уникальным представлением с помощью такого кода: views.py

def friends(request):
    if request.method == 'GET':
        name = request.POST['name']
         users = User.objects.filter(username__startswith=name,friend_request=False) #this way you can filter just the users you didn't request friendship
        if not users:
            pass
        else:
            for i in users:
                messages.info(request,i.username,extra_tags=i.profile.profpic)
    if request.method == 'POST':
        name2 = request.POST['name2']
        request5 = Requests.objects.filter(name=request.user.username,friend=name2).first()
        if request5:
            pass
        else:
            requests3 = Requests(name=request.user.username,friend=name2)
            requests3.save()
return render(request,'requested.html')

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

Вернуться на верх