我试图遵循指南使用向导gem对对象进行部分验证,但我一直得到错误未定义的方法`include?' 对于nil:NilClass,无法理解有什么问题,已经尝试按照一步一步的说明进行操作.
日志中的错误显示.
NoMethodError - undefined method `include?' for nil:NilClass:
app/models/property.rb:22:in `active_or_tenants?'
Run Code Online (Sandbox Code Playgroud)
这是我的步骤控制器.
class Properties::BuildController < ApplicationController
include Wicked::Wizard
steps :tenant, :confirmed
def show
@property = Property.find(params[:property_id])
@tenants = @property.tenants.new(params[:tenant_id])
render_wizard
end
def update
@property = Property.find(params[:property_id])
params[:property][:status] = step.to_s
params[:property][:status] = 'active' if step == steps.last
@property.update_attributes(params[:property])
render_wizard @property
end
def create
@property = current_user.properties.build(params[:property])
logger.info @property.attributes
if @property.save
flash[:success] = "Tenant Added"
redirect_to wizard_path(steps.second, :property_id => @property.id)
else
render 'edit'
end
end
end
Run Code Online (Sandbox Code Playgroud)
Property.rb
class Property < ActiveRecord::Base …Run Code Online (Sandbox Code Playgroud) 我使用Typo3 4.6表单向导在页面上创建了一个表单,但在页面上呈现为
<!-- Mail form inserted: [begin] -->
<fieldset class="csc-mailform">
<div class="csc-mailform-field">###LABEL### ###FIELD###</div>
</fieldset>
<!-- Mail form inserted: [end] -->
Run Code Online (Sandbox Code Playgroud)
...而不是显示表格.我对Typo3完全不熟悉.我如何让它工作?
我想实现一个简单的2部分FormWizard.表单1将动态生成如下内容:
class BuyAppleForm(forms.Form):
creditcard = forms.ChoiceField(widget = forms.RadioSelect)
type = forms.ChoiceField(widget = forms.RadioSelect)
def __init__(self,*args, **kwargs):
user = kwargs['user']
del kwargs['user']
super(BuyAppleForm, self).__init__(*args, **kwargs)
credit_cards = get_credit_cards(user)
self.fields['creditcard'].choices = [(card.id,str(card)) for card in credit_cards]
apple_types= get_types_packages()
self.fields['type'].choices = [(type.id,str(type)) for type in apple_types]
Run Code Online (Sandbox Code Playgroud)
这将动态创建一个包含可用选项列表的表单.
我的第二种形式,我实际上不想输入.我只想显示一个确认屏幕,其中包含信用卡信息,苹果信息和金额(总金额,税金,运费).用户单击"确定"后,我希望开始购买苹果.
我能够通过传入kwargs中的request.user对象来实现单一表单方式.但是,使用FormWizard,我无法弄清楚这一点.
我是否接近问题并且FormWizard不是正确的方法吗?如果是,Form __init__方法如何从HTTP请求访问用户对象?
我查看了django文档,做了大量的谷歌搜索,并尝试了不少解决方案但无济于事.
我使用Django的FormWizard创建了一个3部分表单.一旦验证了最后一个表格(付款表格),我就会向付款网关发送付款请求.
我正在使用FormWizard的'process_step'方法进行付款处理.
我很难弄清楚如何在付款失败时让FormWizard再次显示付款页面.就像现在一样,FormWizard的'done'方法被调用(在我在process_step中完成处理之后),因为所有表单都已经过验证.
我想知道是否需要覆盖调用方法.不确定如何做到这一点,但我现在正试图解决这个问题.
任何帮助将非常感激.问候,肖恩
class TrainingWizard(FormWizard):
def process_step(self,request,form,step):
if step == 0:
self.extra_context = {'stepOne': "One"}
if step == 1:
self.extra_context = {'stepTwo': "Two"}
if step == 2:
if self.get_response != "Success":
#Payment Failed
#Add error message
#Show Payment Form Again to allow user to retry
return
def get_response(self):
#return "Success"
return "Declined"
def done(self, request, form_list):
return HttpResponseRedirect('/training-registration-complete/')
Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery Form Wizard 3.0.4插件进行多步注册过程.它使用内置的jQuery验证器插件,从一步到另一步工作正常.编辑:这意味着我已经在使用validationEnabled:true,formOptions和validationOptions,这些都有效.我需要在常规功能之外运行相同的验证.
问题是我需要运行验证器并在两点手动显示错误.对于我所拥有的特殊领域,以及在提交AJAX之前.我尝试过以下内容,它什么都不做:
$("#registrationForm").validate();
Run Code Online (Sandbox Code Playgroud)
表单向导脚本(jquery.form.wizard-3.0.4.js)在进行下一步时似乎正在执行此操作:
this.element.validate().focusInvalid();
Run Code Online (Sandbox Code Playgroud)
所以我尝试了这个,它也没有做任何事:
$("#registrationForm").element.validate().focusInvalid();
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我用FormWizard创建了一个2步表单,如下所示:
现在第二种形式取决于第一种形式的输入.一些博客或stackoverflow帖子涵盖了类似的主题,我按照说明操作. 但是,在process_step期间应该保存的变量不可用于下一个_ init _.
如何将变量位置从process_step传递到_ init _?
class reMapStart(forms.Form):
location = forms.CharField()
CHOICES = [(x, x) for x in ("cars", "bikes")]
technology = forms.ChoiceField(choices=CHOICES)
class reMapLocationConfirmation(forms.Form):
def __init__(self, user, *args, **kwargs):
super(reMapLocationConfirmation, self).__init__(*args, **kwargs)
self.fields['locations'] = forms.ChoiceField(widget=RadioSelect(), choices=[(x, x) for x in location])
class reMapData(forms.Form):
capacity = forms.IntegerField()
class reMapWizard(FormWizard):
def process_step(self, request, form, step):
if step == 1:
self.extra_context['location'] = form.cleaned_data['location']
def done(self, request, form_list):
# Send an email or save to the …Run Code Online (Sandbox Code Playgroud) 我试图根据步骤中的复选框有条件地重复Django Formwizard(Django 1.4)中的一个步骤.表单创建一个对象,并有一个复选框(希望)允许他们重复该步骤并使用相同的表单创建相同模型的另一个对象.
我看到了这个答案:Django FormWizard动态改变form_list但不幸的是我认为它只适用于旧版本的FormWizard.
process_step函数不再具有form_list属性.它也没有当前步骤属性(或步骤属性),但我可以通过表单的QueryDict访问当前步骤.它包含一个表单字典,但我不认为在该字典中插入另一个步骤会做任何事情,不幸的是,因为它是一个字典而不是列表,所以我必须在插入它之后修改每个步骤键.
那么,有没有一种方法可以使用Django 1.4 FormWizard将新步骤添加到表单列表中?
更新 - 开始考虑覆盖get_next_step(自我,步骤)可能是要走的路,但任何输入都非常感激.
更新#2 - 尝试使用get_next_step,但无法在实例的form_list中插入新表单.这并不意味着它不可能 - 想法?
我正在使用 twitter bootstrap 并希望将表单向导与验证结合起来。但是在尝试了很多之后,表单向导和验证在下一个按钮上不起作用。我犯错的地方。我的编码如下
<div class="portlet-body form">
<form action="#" id="form_sample_2" class="form-horizontal">
<div class="form-wizard">
<div class="navbar steps">
<div class="navbar-inner">
<ul class="row-fluid nav nav-pills">
<li class="span3 active">
<a href="#tab1" data-toggle="tab" class="step active">
<span class="number">1</span>
<span class="desc"> Registration</span>
</a>
</li>
<li class="span3">
<a href="#tab2" data-toggle="tab" class="step">
<span class="number">2</span>
<span class="desc"> Review Application</span>
</a>
</li>
</ul>
</div>
</div>
<div id="bar" class="progress progress-success progress-striped">
<div class="bar" style="width: 25%;"></div>
</div>
<div class="tab-content background-color-blue">
<div class="tab-pane active" id="tab1">
<h3 class="block">Registration</h3>
<div class="control-group">
<label class="control-label">UserName:</label>
<div class="controls span8"> …Run Code Online (Sandbox Code Playgroud) 我有一个工作表单向导.要进入向导,用户将单击主页上的按钮.
如果我完成向导(三个步骤)并返回主页并再次单击该按钮,则没有问题.该向导再次很好,并且所有表单都是空的,这就是我们想要的.
但是,如果你没有完成向导,比如说我在第二步,然后我回到主页,点击那里的按钮,我将回到第二页.那不是我们想要的.我们想要一个全新的向导.
我想实现一个"取消"或"重置"按钮,如果单击该按钮,用户将被重定向到主页,当用户单击该按钮时,他们将转到向导的第一步,所有表单都为空.
我想渲染多步形式的第一步@trade_wizard(它有自己的控制器WizardsController)作为部分内部ItemsController#show,但我不知道如何构建它而不将代码从一个控制器加倍到另一个控制器.
我正在渲染Item的显示页面中的第一步:
<%= render "/wizards/step1" %>
Run Code Online (Sandbox Code Playgroud)
@trade_wizard在实例化@trade的特殊模型中处理,然后从每个步骤连续继承验证:
module Wizard
module Trade
STEPS = %w(step1 step2 step3).freeze
class Base
include ActiveModel::Model
attr_accessor :trade
delegate *::Trade.attribute_names.map { |attr| [attr, "#{attr}="] }.flatten, to: :trade
def initialize(trade_attributes)
@trade = ::Trade.new(trade_attributes)
end
end
class Step1 < Base
validates :trade_requester_id, :trade_recipient_id, :wanted_item_id, presence: true
validates :shares, numericality: { only_integer: true, greater_than_or_equal_to: 0,
less_than_or_equal_to: :max_shares }
def max_shares
@trade.wanted_item.shares
end
end
class Step2 < Step1
validates :collateral_item_id, presence: true
end
class …Run Code Online (Sandbox Code Playgroud) formwizard ×10
django ×5
validation ×4
forms ×3
dynamic ×2
jquery ×2
call ×1
choice ×1
django-1.4 ×1
django-forms ×1
radio-button ×1
ruby ×1
typo3 ×1
typoscript ×1
wizard ×1