Цикл For в шаблоне Django
я хочу установить функцию 'отправить запрос/отменить запрос' в шаблоне.
Проблема с отображением, если запрос существует 'cancel', если нет 'send'.
Не пойму как правильно получить запрос и сравнить 'profile' с 'to_profile'.
Теперь я застрял с циклом 'for' в цикле 'for'... \
В шаблоне отображается 3 кнопки (одинаковое количество запросов с этого мероприятия) для одного профиля Введите описание изображения здесь
Могли бы вы дать мне несколько советов, как исправить, избежать или сделать по-другому, пожалуйста.
Спасибо!
модель запроса
class EventInviteRequest(models.Model):
from_event = models.ForeignKey(Event, on_delete=models.CASCADE,
related_name='from_event', null=True)
to_profile = models.ForeignKey(Profile, on_delete=models.CASCADE,
related_name='to_profile', null=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"From {self.from_event} to {self.to_profile}"
просмотр, который я пытаюсь использовать
def get_list_of_all_users(request, event_id):
"""Get list of all users"""
event = Event.objects.get(id=event_id)
profiles = Profile.objects.all()
requests = EventInviteRequest.objects.filter(from_event=event)
context = {'profiles': profiles, 'event': event, 'requests': requests}
return render(request, 'events/invite_all_profiles_to_event.html', context)
шаблон
{% extends 'base.html' %}
{% load static %}
{% block title %}All profiles{% endblock %}
{% block content %}
<h3>All profiles:</h3>
{% for profile in profiles %}
<div style="display: inline-block; margin-right: 10px; text-align: center;">
<a href="{% url 'account:profile' profile.id %}">
{% if profile.photo %}
<img src="{{ profile.photo.url }}" width="70" height="100">
{% else %}
<img src="{% static 'images/no_img/no_img.png' %}" width="70" height="100">
{% endif %}
<h4>{{ profile.user }}</h4>
</a>
{% if request.user == profile.user %}
<p>You</p>
{% else %}
{% if profile in request.user.profile.friends.all %}
<p>Friends</p>
{% else %}
{% if profile == request.user.profile %}
{% else %}
<a href="{% url 'account:send' profile.id %}">Add to friends</a>
{% endif %}
{% endif %}
<br>
{% endif %}
{% if request.user.profile == profile %}
{% else %}
<br>
The problem here
{% for req in requests %}
{% if req.to_profile == profile %}
<a href="{% url 'events:cancel_event_invite' event.id profile.id %}">Cancel</a>
<br>
{% else %}
<a href="{% url 'events:invite_user_to_event' event.id profile.id %}">Invite to event</a>
<br>
{% endif %}
{% endfor %}
{% endif %}
</div>
{% empty %}
<p>No profiles yet</p>
{% endfor %}
{% endblock %}
попробуйте сделать что-то вроде этого. models.py
class EventInviteRequest(models.Model):
from_event = models.ForeignKey(Event, on_delete=models.CASCADE,
related_name='from_event', blank=True,null=True)
to_profile = models.ManyToManyField(Profile, on_delete=models.CASCADE,
related_name='to_profile', blank=True,null=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"From {self.from_event}"
- бег
python manage.py makemigrations
- бег
python manage.py migrate
views.py
def get_list_of_all_users(request, event_id):
"""Get list of all users"""
event = Event.objects.get(id=event_id)
profiles = Profile.objects.all()
requests = EventInviteRequest.objects.filter(from_event=event)
context = {'profiles': profiles, 'event': event, 'requests': requests}
return render(request, 'events/invite_all_profiles_to_event.html', context)
в вашем шаблоне, где у вас возникли проблемы
{% for req in requests %}
{% if profile in req.to_profile.all %}
<a href="{% url 'events:cancel_event_invite' event.id profile.id %}">Cancel</a>
<br>
{% else %}
<a href="{% url 'events:invite_user_to_event' event.id profile.id %}">Invite to event</a>
<br>
{% endif %}
{% endfor %}