Можно ли определить success_url в django без kwargs - PullRequest
0 голосов
/ 11 февраля 2020

Я разрабатываю учебник в django документах по созданию приложения для голосования. Я пытаюсь добиться того, чтобы иметь возможность удалить кандидата и, в случае успеха, вернуться к подробному обзору выборов. Я знаю, что мог бы просто добавить другой параметр к URL-адресу, как (полный шаблон ниже)

<a href="{% url 'candidate_delete' c.id object.id %}" class="btn btn-danger fa fa-trash" class></a>

Я хотел бы знать, возможно ли использовать метод публикации (хотя есть нет формы). Я провел некоторое исследование, нашел параметр «следующий», но он не проходит. Похоже, что ему нужна форма, так как все примеры используют «следующий» внутри формы.

Я также пытался установить success_url на основе выборов, для которых кандидатом для удаления является ForeignKey-d, но это приводит к ошибке:

Неправильно сконфигурировано в / выборы / андидат / delete / 13 / Похоже, что в URLconf '1' нет шаблонов. Если вы видите в файле действительные шаблоны, то проблема, вероятно, вызвана циклическим импортом.

Это представление:

class CandidateDelete(LoginRequiredMixin, DeleteView):
    model = Candidate
    template_name = 'election/delete.html'

    def get_object(self):
        obj = super().get_object()
        print(self.request.POST)
        election = Election.objects.get(id=obj.poll_id)
        if not election.owner_id == self.request.user.id:
            raise Http404
        return obj

    def get_success_url(self, **kwargs):
        obj = super().get_object()
        election = Election.objects.get(id=obj.poll_id)
        return reverse_lazy('election_detail', election.id)

Шаблонlection_detail

{% extends 'base.html' %}

{% block content %}
{{object.name}} - 
<ul>
   {% for c in candidate_list %}
  <h2>{{ c.name }}</h2>
    <li> {{ c.intro }} {{c.id}} 
        {{c.email}} 
        <a href="{% url 'candidate_delete' c.id %}" class="btn btn-danger fa fa-trash" class></a> <input type="hidden" name="next" value={{object.id}} />
    </li>
    {% endfor %}
    <a href="{{ request.META.HTTP_REFERER }}" class="btn btn-primary" class>Back</a> 
</ul>
{% endblock %}

объект в шаблоне - это выборы, с которыми связаны кандидаты.

Как видите, я попробовал метод post, но, читая вокруг, он, похоже, работает только в форме. Конфигурация success_url также выдает ошибку.

Любая помощь по использованию метода post или настройке get_success_url с данными из модели очень ценится.

1 Ответ

0 голосов
/ 11 февраля 2020

Итак, очевидно, reverse_lazy должен выглядеть так:

    def get_success_url(self, **kwargs):
        obj = super().get_object()
        election = Election.objects.get(id=obj.poll_id)
        return reverse_lazy('election_detail', kwargs={'pk':election.id})

Пока в шаблоне вы можете просто добавить var, в возвращаемой функции вы должны указать, что это kwargs.

Я почти уверен, что "выборы = .." могут быть короче, но это на потом

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