Django FormView pass pk in success_url
假设我有以下表单视图,并且我想在提交表单后将
型号.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}) |