Я пытаюсь обновить одно поле своей модели, я переопределил метод get_success_url в updateview, но он не работает.
class MensajeApropiado(UpdateView):
model = Mensaje
form_class = FormMensaje
template_name = 'foro/msjCensura.html'
def get_success_url(self):
return reverse_lazy('mensajes', args=(self.object.tema.id,))
urls.py
from django.contrib.auth.decorators import login_required as LR
url(r'^mensajes/(?P<pk>\d+)/$', ListaMensajes.as_view(), name="mensajes"),
url(r'^msjcensura/(?P<pk>\d+)/', LR(MensajeApropiado.as_view()), name="censura"),
Это шаблон:
{% extends "base.html" %}
{% load i18n %}
{% block content %}
Fecha en Perú: {% now "m-d-Y" %}
<div>
<a href="{% url 'home' %}">Foros</a> > <a
href="{% url 'temas' mensaje.tema.foro.id %}">{{ mensaje.tema.foro.titulo }}</a>
> <a href="{% url 'mensajes' mensaje.tema.id %}">{{ mensaje.tema.titulo }}</a> > Censura del mensaje
</div>
{% if mensaje.tema.autor.user.id == request.user.id and request.user.is_authenticated %}
Tema: {{ mensaje.tema.titulo }} - {{ mensaje.tema.fecha|date:"M-d-Y" }}
- Autor: <a href="{% url 'editar_perfil' request.user.id %}">{{ mensaje.tema.autor }} </a>
{% else %}
Tema: {{ mensaje.tema.titulo }} - {{ mensaje.tema.fecha|date:"M-d-Y" }}
- Autor: <a href="{% url 'detalle_usuario' mensaje.autor.id %}">{{ mensaje.autor }} </a>
{% endif %}
<br><br>
<div id="no-more-tables">
<table style='table-layout:fixed;width:100%' class="col-md-12 table-bordered table-striped table-condensed cf">
<thead class="cf">
{% with mensaje.profile_data as pdata %}
<tr>
<th style='width: 15%;'>
Autor
</th>
<th class="celdacontenido" style='width: 85%;'>
{{ mensaje.fecha|date:"M, d-Y, h:i a" }}
</th>
</tr>
</thead>
<tbody>
<tr>
<td data-title='Autor'>
{% if mensaje.autor.id == request.user.id and request.user.is_authenticated %}
<a href="{% url 'editar_perfil' request.user.id %}"> {{ mensaje.autor }} </a><br>
{% else %}
<a href="{% url 'detalle_usuario' mensaje.autor.id %}"> {{ mensaje.autor }} </a><br>
{% endif %}
{% if request.user.is_staff %} Administrador<br>
{% else %}
Miembro<br>
{% endif %}
{% if pdata.1 %}
<img border="0" alt="Profile Pic" src="/media/{{ pdata.1 }}"/><br>
{% else %}
<img border="0" alt="Profile Pic" src="/media/imagenes/nouserimg.png" height="140" width="140"/><br>
{% endif %}
Fecha de registro: <br> {{ mensaje.autor.date_joined|date:"M-d-Y" }} <br>
Número de mensajes: {{ pdata.0 }}
{% endwith %}
</td>
<td align="justify" class="celdacontenido" data-title='{{ mensaje.fecha|date:"m-d-Y, h:i a" }}'>
{{ mensaje.contenido }}<br>
</td>
</tr>
</tbody>
</table>
</div>
<br>
<b>Desmarcando la casilla el mensaje se catalogará como inapropiado, caso contrario al seleccionar
la casilla, será apropiado.</b> <br><br>
<form method="POST" action="">
{% csrf_token %}
Apropiado:
{{ form.apropiado }}<br><br>
<input class="btn btn-primary" type="submit" value="Confirmar" id="submit"/>
</form>
{% endblock %}
Когда я нажимаю на
<a href="{% url 'censura' mensaje.id %}" class="apropiado">Marcar como inapropiado</a>
из моего другого шаблона он работает, я без проблем вижу шаблон 'censura', но когда я нажимаю кнопку отправки, он дает NoReverseMatch в /msjcensura/5/
Reverse for 'detalle_usuario' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['usuario/(?P<pk>\\d+)/']
at
{% url 'detalle_usuario' mensaje.autor.id %}
Я этого не понимаю, я указал другой вид ("mensajes"), но он идет по тому же шаблону (censura).
Редактировать, у меня был URL-адрес, я забыл ввести его в вопросе, потому что проблема была в перенаправлении, а mensaje.autor.id возвращал «Нет»:
url(r'^usuario/(?P<pk>\d+)/', LR(DetalleUsuario.as_view()), name="detalle_usuario"),
И вид:
class DetalleUsuario(DetailView):
model = PerfilUsuario
template_name = "foro/detalleUsuario.html"
mensaje.autor
, либоmensaje.autor.id
равно None. Если вы распечатаетеmensaje.autor
, что вы получите? - person Nathan Villaescusa   schedule 23.11.2015detalle_usuario
URL - person pythad   schedule 23.11.2015