【发布时间】:2018-12-09 22:04:40
【问题描述】:
假设我有以下 FormView,并且我想在提交表单后将 item.pk 传递给其他视图。我想我必须编辑get_success_url(),但我什至不知道如何从form_valid() 获取item.pk:
models.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
forms.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']
views.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?
【问题讨论】:
-
当你指定它是否有效时,你真的应该避免保存一些东西。现在你基本上已经完全失效了 Django 合约,因此,有几件事可能不再正常工作。
-
这是
ModelForm吗?在这种情况下,您最好使用ModelFormView,因为这提供了更多便利。 -
你的意思是 ModelFormMixin 吗?您可能有一个如何使用它的示例?
-
no mixin 用于“将
Form升级为ModelForm,可以这么说,但您可以让SomeForm使用ModelForm子类(如果它直接映射到单个模型)。 -
说实话,你的 cmets 让我有点困惑 :-( 我更新了我的代码示例,也许这有助于理解我拥有什么以及我在寻找什么?顺便说一句 form.save() 是在许多其他答案中提到,我认为没关系。
标签: django django-forms django-views django-class-based-views