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')
Я не знаю, чего именно вы хотите добиться во второй части представления, поэтому я оставил все как есть. Сообщите мне, сработало ли это для вас