Django отображение каждого объекта в кнопке
Добрый день, у меня есть страница для тестирования, где создаются тикеты и где перечислены все созданные тикеты (заголовки). Теперь вы должны иметь возможность нажать на название созданного тикета.
Кнопка перенаправляет на дополнительную страницу, где находится вся информация о конкретном билете.
У меня всегда были проблемы с отображением специфичных для пользователя вещей, так что нужно сделать, чтобы href="" каждой ссылки перенаправляло в HTML на конкретный билет?
Я сделал следующее \\\forms.py
{% for i in request.user.addtitle_set.all %}
<div>
{% if i.user == request.user %} {{ i.title }} {% endif %}
<form action="{% url SOMETHING_HERE i.id}" style="display: inline">
<button type="submit">View Ticket</button>
</form>
</div>
<br />
{% endfor %}
\\\urls.py
path('dashboard/user/ticket', ticket_view),
path('dashboard/user/ticket/<int:id>/',
ticket_system_view, name="view_ticket"),
\\\ models.py
class Ticket(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
default=None,
null=True,
on_delete=models.CASCADE,
)
title = models.CharField(max_length=200)
description = models.TextField()
creator_adress = models.GenericIPAddressField(null=True)
start_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return str(self.title)
\\\views.py
@login_required
def ticket_view(request, id, *args, **kwargs):
try:
obj = Ticket.objects.get(id=id)
except Ticket.DoesNotExist:
return redirect('/')
if request.method == 'POST':
form = TicketForm(request.POST, instance=Ticket(user=request.user))
if form.is_valid():
obj = form.save(commit=False)
obj.creator_adress = get_client_ip(request)
obj.save()
return redirect('/dashboard/user/ticket')
else:
form = TicketForm()
return render(request, 'ticket.html', {'form': form})
def ticket_system_view(request, id, *args, **kwargsw):
# Here I will put all the stuff for the specific ticket page
return render(request, 'ticket_system.html', {})
Редактирование: Я даже не могу получить доступ к странице из-за ошибки TypeError at /dashboard/user/ticket
ticket_views() отсутствует 1 обязательный позиционный аргумент: 'id'
Ваш urls.py
path('dashboard/user/ticket', ticket_view),
path('dashboard/user/ticket/<int:id>/',
ticket_system_view, name="view_ticket"),
Должно быть
path('dashboard/user/ticket/<int:id>', ticket_view, name="some_name"),
path('dashboard/user/ticket/<int:id>/',
ticket_system_view, name="view_ticket"),
Так как ticket_view ожидает id
ticket_views() missing 1 required positional argument: 'id'
В вашем views.py вы получаете id аргумента, поэтому он должен быть передан.
Измените urls.py как
path('dashboard/user/ticket/<int:pk>', ticket_view, name='ticket_view'),
path('dashboard/user/ticket/<int:id>/',
ticket_system_view, name="view_ticket"),
Также ваш urlnamespace в вашей форме как
<form action="{% url 'ticket_view' i.id %}" style="display: inline">
В теге шаблона url должны быть пробелы до и после %. Вам не хватает окончания % добавьте его тоже.