Реверс для 'edit_team' с аргументами ключевого слова '{' pk ':' '}' не найден. Попробован 1 шаблон (ов): ['club_home / edit_team / (? P <pk>[0-9] +) / $'] - PullRequest
0 голосов
/ 26 января 2019

Получение вышеуказанной ошибки при попытке создать страницу для обновления моей модели с помощью сериализатора.Невозможно использовать pk в представлении edit_team.Любые идеи, где я иду не так?Кнопка Удалить работает нормально с ПК, не уверен, почему обновление не.

urls.py

path('teams/', views.TeamInfo.as_view(), name='teams'),
path('delete_team/<int:pk>/', views.delete_team, name='delete_team'),
path('edit_team/<int:pk>/', views.edit_team, name='edit_team'),

teams.html

<div class="team">
<h3>Team Details</h3>
<p>
    {% csrf_token %}
    {% for info in teams %}
<li>{{ info.club_id }}</li>
<li>{{ info.team_name }}</li>
<li>{{ info.manager_name }}</li>
<form action="{% url 'clubs:delete_team' info.pk %}">
<input type="submit" value="Delete">
</form>
<form action="{% url 'clubs:edit_team' info.pk %}">
<input type="submit" value="Edit">   

edit_team.html

{% extends 'club_main_page.html' %}
{% load rest_framework %}
{% load staticfiles %}
{% block body_block %}

<div class="editteam">
  <h3>Edit Team</h3>
<form action="{% url 'clubs:edit_team' pk=instance.pk %}" method="POST">
      {% csrf_token %}
     {% render_form serializer %}
<input type="submit" name="" value="Update">
</form>

</div>
{% endblock %}

views.py

def delete_team(request, pk):
    team = Team.objects.filter(pk=pk)
    team.delete()
    return redirect('clubs:teams')


def edit_team(request, pk):
    instance = Team.objects.filter(pk=pk)
    if request.method == 'POST':
        serializer = TeamSerializer(request.POST, instance=instance)
        if serializer.is_valid():
            serializer.save()
            return redirect('/')
        else:
            return redirect('/')
    else:
        serializer = TeamSerializer(instance=instance)
        return render(request, 'edit_team.html', {'serializer': serializer})

Trackback: \ clubkit \ clubs \ views.py в edit_pitch возвращает визуализацию (запрос, edit_pitch.html ', {' serializer ': serializer})

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Вы не передали PK в шаблон, поэтому его нельзя использовать для создания там URL-адреса.Измените последнюю строку вашего представления:

return render(request, 'edit_team.html', {''pk': pk, serializer': serializer})
0 голосов
/ 27 января 2019

Хотелось бы подобрать это, используя сериализатор. Но просто воспользуйтесь формой решения на случай, если кому-то понадобится:

def edit_team(request, pk):
instance = Team.objects.filter(pk=pk).first()
if request.method == 'POST':
    form = TeamForm(request.POST, instance=instance)
    if form.is_valid():
        form.save()
        return redirect('clubs:teams')
    else:
        return redirect('clubs:teams')
else:
    form = TeamForm(instance=instance)
    return render(request, 'edit_team.html', {'form': form,
                                              'instance': instance})

Тогда в шаблоне:

{% extends 'club_main_page.html' %}

{% block head %}
<title>Edit Pitch</title>
{% endblock %}

{% block body_block %}

<div class="container">
<form method="post">
    {% csrf_token %}
    {{ form.as_p}}
    <button type="submit">Submit</button>
</form>

</div>

{% endblock %}
0 голосов
/ 26 января 2019

В вашем шаблоне вы пишете:

<form action="{% url 'clubs:edit_team' pk=<b>instance.pk</b> %}" method="POST">

, но есть переменная no instance, вы переходите к процессу рендеринга, поэтому вы должны добавить и эту, так что:

def edit_team(request, pk):
    instance = Team.objects.filter(pk=pk)
    if request.method == 'POST':
        serializer = TeamSerializer(request.POST, instance=instance)
        if serializer.is_valid():
            serializer.save()
            return redirect('/')
        else:
            return redirect('/')
    else:
        serializer = TeamSerializer(instance=instance)
        return render(
            request,
            'edit_team.html',
            {'serializer': serializer<b>, 'instance': instance</b>})

Я не уверен, однако, если перенаправление на / является хорошей идеей, конечно, нет, если serializer является не допустимым.В этом случае обычно требуется снова отобразить страницу, но с ошибками.Поэтому, вероятно, также лучше использовать формы [Django-doc] .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...