fus*_*596 6 django django-forms django-views django-class-based-views
假设我有以下 FormView,并且我想item.pk在提交表单后将其传递给其他视图。我想我必须编辑,get_success_url()但我什至不知道如何item.pk获取form_valid():
模型.py
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
Run Code Online (Sandbox Code Playgroud)
表格.py
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']
Run Code Online (Sandbox Code Playgroud)
视图.py
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?
Run Code Online (Sandbox Code Playgroud)
anj*_*505 13
你可以像下面这样做
class SomeView(FormView):
form_class = SomeForm
template_name = 'appname/form.html'
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})
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以从对象属性访问 pk,如下所示:
class SomeView(CreateView):
"""
"""
model = Model
def get_success_url(self) -> str:
return reverse_lazy('success', kwargs={'pk': self.object.pk})
Run Code Online (Sandbox Code Playgroud)