Tworzę ten projekt w django. Pracuję nad reportażem filmów, gdzie przechodzę do szczegółowego widoku filmu, a następnie wciskam przycisk zgłoś. Pojawia się report_form, w którym uzasadniam, dlaczego zgłaszam, a następnie klikam raport. Wszystko działa dobrze, ale jest jedna rzecz. Po zgłoszeniu jestem odsyłany do losowego (?) Szczegółowego widoku filmu, ale chciałbym wrócić do widoku filmu, który opisuję. Ale jak???

views.py

class FilmReportView(LoginRequiredMixin, CreateView):
    model = Report
    fields = ['reason']

    def form_valid(self, form):
        form.instance.reporter = self.request.user
        form.instance.reports_id = self.kwargs['pk']
        return super().form_valid(form)

    def get_success_url(self):
        return "film/<int:pk>/report"

report_form.html

{% extends "board/base.html" %}
{% load crispy_forms_tags %}
{% load materializecss %}
{% block content %}
<div class="valign-wrapper row login-box">
    <div class="col card hoverable s10 pull-s1 m6 pull-m3 l8 pull-l2">
        <form method="POST" action="" enctype="multipart/form-data">
            {% csrf_token %}
            <div class="card-content">
                <span class="card-title">Jusity why you want to report this film?</span>
                <div class="row">
                    {{ form|materializecss }}
                </div>
            </div>
            <div class="card-action right-align">
                <input type="reset" id="reset" class="btn-flat grey-text waves-effect">
                <input type="submit" class="btn green waves-effect waves-light" value="Report">
            </div>
        </form>
    </div>
</div>
{% endblock content %}

urls.py

urlpatterns = [
    path("", views.films_view, name="board-home"),
    path("film/add", FilmAddView.as_view(), name="film-add"),
    path("film/<int:pk>/", FilmDetailView.as_view(), name="film-detail"),
    path("film/<int:pk>/report", FilmReportView.as_view(), name="film-report"),
]

models.py

class Report(models.Model):
    reason = models.TextField()
    reporter = models.ForeignKey(User, on_delete=models.CASCADE, related_name="Reporter")
    reports = models.ForeignKey(Film, on_delete=models.CASCADE)

    def __str__(self):  # pragma: no cover
        return f"{self.reports.title} reported by {self.reporter.username}"

    def get_absolute_url(self):  # pragma: no cover
        return reverse("film-detail", kwargs={"pk": self.pk})
0
Jon 16 marzec 2020, 10:50

2 odpowiedzi

Najlepsza odpowiedź

Napraw swój FilmReportView get_success_url(), aby wyglądał tak:

def get_success_url(self):
        return reverse("film-detail", kwargs={"pk": self.object.reports.id})

To powinno załatwić sprawę

1
Jerry Shaw 16 marzec 2020, 09:33

W swoim views.py lub nawet w szablonie możesz umieścić parametr next z adresem URL, który chcesz:

form/action/url?next={{request.path}}

Zobacz więcej o następnych: https://www.reddit.com/r/django/comments/32s9ag / how_do_i_set_the_next_context_variable_in_django /

0
Zaven Zareyan 16 marzec 2020, 07:57