Django FormView在success_url中传递pk

Django FormView pass pk in success_url

假设我有以下表单视图,并且我想在提交表单后将item.pk传递给其他视图。我想我必须编辑get_success_url(),但我甚至不知道如何从form_valid()获取item.pk

型号.py

1
2
3
4
5
6
7
8
9
from django.db import models

class Book(models.Model):
    field1 = models.CharField(max_length=32)
    field2 = models.CharField(max_length=32)
    field3 = models.CharField(max_length=32)

    def __str__(self):
        return self.field1

表格.py

1
2
3
4
5
6
7
8
9
10
from django import forms
from .models import Book

class SomeForm(forms.ModelForm):

    field_order = ['field3', 'field2', 'field1']

    class Meta:
        model = Book
        fields = ['field1', 'field2', 'field3']

视图.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from django.shortcuts import render
from django.views.generic.edit import FormView
from .forms import SomeForm

class SomeView(FormView):
    form_class = SomeForm
    template_name = 'appname/form.html'
    success_url = reverse_lazy('somewhere')


    def form_valid(self, form):

        # save in Database
        item = form.save()

        # item.pk stores the saved pk

        return super().form_valid(form)

    def get_success_url(self)
         # how can i get item.pk from form_valid() here and pass it to another view?


你可以这样做

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class SomeView(FormView):
    form_class = SomeForm
    template_name = 'appname/form.html'
    success_url = reverse_lazy('somewhere')
    pk = None


    def form_valid(self, form):
        item = form.save()
        self.pk = item.pk
        return super(SomeView, self).form_valid(form)

    def get_success_url(self):
         #print(self.pk)
         return reverse('some_url', kwargs={'pk': self.pk})