我有一个输入电子邮件的表单和两个提交按钮来订阅和取消订阅时事通讯:
<form action="" method="post">
{{ form_newsletter }}
<input type="submit" name="newsletter_sub" value="Subscribe" />
<input type="submit" name="newsletter_unsub" value="Unsubscribe" />
</form>
Run Code Online (Sandbox Code Playgroud)
我也有课堂形式:
class NewsletterForm(forms.ModelForm):
class Meta:
model = Newsletter
fields = ('email',)
Run Code Online (Sandbox Code Playgroud)
我必须编写自己的clean_email方法,我需要知道哪个按钮是提交的形式.但提交按钮的值不在self.cleaned_data字典中.我能获得按钮的值吗?
我最近通过子类化学习了Django表单FormView,其中所需的表单被分配给FormView.form_class属性.当表单验证时,将form_valid()调用该方法(对于该表单).例如:
from accounts.forms import SignUpForm, UpdateAccountForm, UpdateBillingForm
class SignUpView(FormView):
form_class = SignUpForm
def form_valid(self, form):
# code when form validates...
Run Code Online (Sandbox Code Playgroud)
但是,我现在有一种情况,我需要在一个页面上有三个独特的表单(一次只有一个表单对用户可见).所以,我想在同一个视图中处理它们.
使用FormView可以实现多表单页面吗?我不知道如何处理它,无论是将多个表单传递给View(例如另一个UpdateAccountForm和UpdateBillingForm),还是区分哪个表单已提交/验证?什么是最好的方式?
这可能是一个相当简单的问题,但我似乎无法从Django Docs中找到它.我试图一次保存两个ModelForms,其中一个是另一个的ForeignKey.我不确定如何在视图中编写逻辑以确保这些逻辑正确地结合在一起.
models.py
class Address(models.Model):
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
zipcode = models.PositiveIntegerField()
class Store(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=140, blank=True)
address = models.ForeignKey(Address, null=True)
Run Code Online (Sandbox Code Playgroud)
forms.py
class CreateStore1Form(forms.ModelForm):
class Meta:
model = Store
exclude = ('address',)
class CreateStore2Form(forms.ModelForm):
class Meta:
model = Address
Run Code Online (Sandbox Code Playgroud)
views.py
@login_required
def create(request):
if request.method == "POST":
form1 = CreateStore1Form(request.POST)
form2 = CreateStore2Form(request.POST)
if form1.is_valid() and form2.is_valid():
store = form1.save(address)
new_address = form2.save(commit=False)
new_address.store = store
mew_address.save()
else:
form1 = CreateStore1Form()
form2 = CreateStore2Form() …Run Code Online (Sandbox Code Playgroud) 我正在创建一个具有两种不同形式的模板,但我遇到以下问题:当我提交第一个时,第二个也经过验证并获得验证错误.我该怎么做才能避免这种冲突?
谢谢,抱歉我的英语.
我在同一个模板的两个不同选项卡中有两个表单。表单的模型通过外键连接。
当我尝试独立保存每个表单时,每个表单都有一个提交按钮,但不幸的是,这两个表单试图再次保存数据,即使我只按下一个提交按钮。
视图.py
def input(request):
my_demographics = DemographicForm(request.POST or None)
my_diagnosis = DiagnosisForm(request.POST or None)
context = RequestContext(request)
if request.method == 'POST':
submitted = request.POST.get('form_id', '')
if submitted == 'demographics':
# Get the Form1 instance
my_demographics = DemographicForm(request.POST)
if my_demographics.is_valid():
my_demographics_object= my_demographics.save()
my_diagnosis=DiagnosisForm({'patient': my_demographics_object.patient_id})
elif submitted == 'diagnosis':
# Get the Form2 instance
my_diagnosis = DiagnosisForm(request.POST)
if my_diagnosis.is_valid():
my_diagnosis.save()
else:
raise ValueError('No form specified !')
return render_to_response('input.html', {'frm':my_demographics, 'frm_d': my_diagnosis}, context)
Run Code Online (Sandbox Code Playgroud)
输入.html
<div class="tab-content">
<!-- Tab panes -->
<form class="tab-pane …Run Code Online (Sandbox Code Playgroud)