标签: django-formwizard

覆盖django-allauth的默认模板

我用这个社会注册/注册图书馆django allauth作为我的一个项目.如何自定义默认模板和表单以提供更好的外观和感觉?

django django-templates django-forms django-formwizard django-allauth

26
推荐指数
4
解决办法
2万
查看次数

如何将以前的表单数据传递给FormWizard中DynamicForm的构造函数

我有一个FormWizard,我需要第一个表单中的数据传递给第二个表单的构造函数,以便我可以构建一个动态表单.

我可以通过FormWizard的process_step获取第一个表单的数据.

我使用字段列表的数据库调用创建第二个窗体的字段.

class ConditionWizardDynamicQuestions(forms.Form):

    def __init__(self, DynamicQuestions=None, *args, **kwargs):
       super(ConditionWizardDynamicQuestions, self).__init__(*args, **kwargs)
       questions = Question.objects.filter(MYDATA = DATA_FROM_1STFORM)
       for q in questions:
            dynField = FieldFactory(q)
            self.fields[q.label] = dynField
Run Code Online (Sandbox Code Playgroud)

如何通过DATA_FROM_1STFORM


我的结果代码:我放弃了表单的init,并将其切换到CreateQuestions def.然后使用向导的get_form覆盖来在创建后更改表单.

class ConditionWizard(SessionFormWizard):
    def get_form(self, request, storage, step=None, data=None, files=None):
        form = super(ConditionWizard, self).get_form(request, storage, step, data, files)
        stepIndex = self.get_step_index(request, storage, step)
        if stepIndex == 1:
            form.CreateQuestions(request.session["WizardConditionId"])
        if stepIndex == 3:
            form.fields['hiddenConditionId'].initial = request.session["WizardConditionId"]
            form.fields['medicationName'].queryset = Medication.objects.filter(condition = request.session["WizardConditionId"])
        return form
Run Code Online (Sandbox Code Playgroud)

django django-formwizard

12
推荐指数
2
解决办法
6205
查看次数

使用Django表单向导为登录页面实现安全的双因素身份验证

所以基本上我想要实现类似Google双因素身份验证实现的东西.我的登录表单包含两步表单向导:

  1. 第1步(验证用户名和密码)
  2. 第2步(验证安全令牌)

使用场景将是:

  1. 用户具有与其帐户关联的安全令牌:如果用户通过了步骤1和步骤2,则将用户登录
  2. 用户没有安全令牌:仅在通过步骤1后立即记录用户

我现在将django的表单向导子类化为我的登录视图.在第2步中,默认情况下,Django FormWizard会将以前提交的表单中的字段值包含为隐藏字段.但是如您所知,密码是在步骤1中输入的,因此出于安全原因,我不希望将其包含在步骤2中.

我的第一个想法是使用会话来指示用户是否已通过步骤1,因此我不需要包含步骤1中的字段值..但我可能会忽略这里的某些内容.有什么更安全的解决方案?

另外我不太明白在FormWizard中使用security-hash.谁能解释一下?

非常感谢.

authentication django django-formwizard

8
推荐指数
3
解决办法
6459
查看次数

当使用带有表单向导的内联表单集时,表单集表单验证在哪里?

我正在创建一个示例,以了解有关使用SessionWizard的内联表单集的更多信息.最后,我想集成动态表单集,以便在提交之前通过模板添加和删除单个表单.但是,当第二种形式中没有数据时,它不能像常规ModelForm那样进行验证.

SessionWizard中是否有需要覆盖的方法?这是Django内在处理的东西吗?

非常感谢指导和实例.

models.py

class Parent(models.Model):
    name = models.CharField(max_length=256)
    def __unicode__(self):
        return name

class Child(models.Model):
    name = models.CharField(max_length=256)
    parent = models.ForeignKey(Parent)
    def __unicode__(self):
        return name
Run Code Online (Sandbox Code Playgroud)

urls.py

test_forms = [['parent', ParentForm],['child', ChildFormSet]]

urlpatterns = patterns('example.views',
    url(r'^$', TestWizard.as_view(test_forms)),
)
Run Code Online (Sandbox Code Playgroud)

forms.py

class ParentForm(ModelForm):
    class Meta:
        model = Parent

class ChildForm(ModelForm):
    class Meta:
        model = Child
        exclude = ('parent',)

ChildFormSet = inlineformset_factory(Parent, Child, extra=1)

class TestWizard(SessionWizardView):
    """
    This WizardView is used to create multi-page forms and handles all the
    storage and validation stuff using …
Run Code Online (Sandbox Code Playgroud)

inline-formset django-formwizard

7
推荐指数
0
解决办法
994
查看次数

django向导,在同一步骤中使用表单和formset

我有一个场景,我正在尝试计划开始编码,我正在考虑使用django wizard.

我的计划是用两个步骤构建一个django向导,第一个简单但第二个稍微复杂一点.第二步将包含一个表单,该表单将根据从第一步中选择的值进行重新整形,我可以看到自己正在做的事情.我已经探索了所有现有的功能,我认为它可以很容易地完成.

我面临的挑战是第二步本身.我有一个表单和一个formset,formset是一对多的形式(文章 - >图像)所以当到达第二步时,用户将能够将一个或多个图像上传到同一篇文章.

我试图在谷歌邮件列表和stackoverflow上的任何地方搜索,以将一个formset传递给django向导类,但似乎你不能在同一步骤中传递两个表单.

NewItemWizard.as_view([
    ('category',    CategorySelectionForm),
    ('article',        ArticleForm)
])
Run Code Online (Sandbox Code Playgroud)

如上所示,在上面的示例代码中,我希望能够将ArticleForm和ImageFormset传递给第二步.有没有办法开箱即用?

基于我正在阅读的内容,我相信使用像get_context_data这样的函数可能有所帮助,但它会非常hacky.

def get_context_data(self, form, **kwargs):
    context = super(NewItemWizard, self).get_context_data(form=form, **kwargs)
    if self.steps.current == 'article':
        context.update({
            'image_formset': ImageFormset()
        })
    return context
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议更好的方法?

干杯,

django django-forms django-formwizard

7
推荐指数
1
解决办法
2249
查看次数

SessionWizardView状态仅保存在最终表单上,done()未执行

我有几个表单已添加到向导中,但表单状态仅在最后一步中保留,并且不执行done().

我已经根据django文档中的示例创建了以下内容,以尝试深入了解这一点.似乎最后一步是唯一一个在步骤之间移动时拯救状态的步骤.

class OneForm( Form ):
    field_one = forms.CharField(label='1', max_length=100)
    field_two = forms.CharField(label='2', max_length=100)
    field_three = forms.CharField(label='3', max_length=100)
class TwoForm( Form ):
    field_one = forms.CharField(label='4', max_length=100)
    field_two = forms.CharField(label='5', max_length=100)
    field_three = forms.CharField(label='6', max_length=100)

TEST_WIZARD_FORMS = [
    ("one", OneForm),
    ("two", TwoForm),
]
TEST_TEMPLATES = {
    'one': 'tour/one.html',
    'two': 'tour/two.html',
}
class TestWizardView( SessionWizardView ):
    form_list = TEST_WIZARD_FORMS
    def done(self, form_list, **kwargs):
        print('done executed')
        return reverse('home')
    def get_template_names(self):
        return [TEST_TEMPLATES[self.steps.current]]
Run Code Online (Sandbox Code Playgroud)

这对于模板(one.html和two.html都相同)

<html>
<body>
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p> …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-views django-formwizard

7
推荐指数
1
解决办法
767
查看次数

在django中将自定义html添加到choicefield标签

我现在正在努力满足要求,我想在选择字段标签上添加一个图像,我真的不知道如何做到这一点.我正在使用django表单向导来呈现表单.这是显示我想要实现的目标的图像: 在此输入图像描述

这就是我现在所拥有的(使内置单选按钮,我知道它可以通过css实现): 在此输入图像描述

这是forms.py:

from django import forms
from django.utils.translation import gettext as _


CHOICES=[('0','Pay by card'), ('1','Invoice')]




class PaymentForm(forms.Form):
    title = 'payment'
    payment_method = forms.ChoiceField(label = _("Payment Options"), choices=CHOICES, widget=forms.RadioSelect(), required = True)
Run Code Online (Sandbox Code Playgroud)

我使用向导形式渲染:

 {{ wizard.form.payment_method.label_tag }}
                                {{ wizard.form.payment_method|safe }}
                                {{ wizard.form.payment.errors}}
Run Code Online (Sandbox Code Playgroud)

除了自定义小部件之外,任何人都对此有任何建议吗?

django django-forms django-formwizard django-1.5

6
推荐指数
1
解决办法
3320
查看次数

Django表单向导:删除由中间步骤存储的临时文件

我正在使用django(1.4)formwizard作为我的应用程序.在第1步中,我上传了2个文件.这些文件在第二步中使用.一切都工作正常,但这--- ---"当我完成所有步骤或我在第1步后停止我仍然有临时文件存储在MEDIA目录"

如何在任何情况下确保删除这些文件?

django django-formwizard django-storage

6
推荐指数
1
解决办法
622
查看次数

Django FormWizard如何动态更改form_list

我能够动态调用一个与我从step ealier中选择的数据相关的表单.

但是当我在done方法中时,我可以看到我form_list保持不变.

这是我做的:

def get_form_list(request, form_list=None):
    if form_list is None:
        form_list = [ProviderForm, DummyForm, ConsummerForm, DummyForm, \
                 ServicesDescriptionForm]
    return UserServiceWizard.as_view(form_list=form_list)(request)


class UserServiceWizard(SessionWizardView):
    instance = None

    def __init__(self, **kwargs):
        self.form_list = kwargs.pop('form_list')
        return super(UserServiceWizard, self).__init__(**kwargs)

    def get_form_instance(self, step):
        if self.instance is None:
            self.instance = UserService()
        return self.instance

    def get_context_data(self, form, **kwargs):
        data = self.get_cleaned_data_for_step(self.get_prev_step(
                                                    self.steps.current))
        if self.steps.current == '1':
            service_name = str(data['provider']).split('Service')[1]
            form = class_for_name('th_' + service_name.lower() + '.forms',
                                  service_name + 'ProviderForm')
            self.form_list['1'] = …
Run Code Online (Sandbox Code Playgroud)

python django django-forms django-formwizard

6
推荐指数
1
解决办法
3551
查看次数

Django:动态设置Formset for Form Wizard中的步骤

作为我的Django视图中的表单向导的一部分,我使用的是Formset.每个步骤的向导表单都声明如下:

UserFormSet = modelformset_factory(account_models.MyUser,
                                   form=account_forms.MyUserForm, 
                                   extra=5, 
                                   max_num=10, 
                                   can_delete=True)

FORMS = [('userchoice', UserChoiceForm),
         ('user', UserFormSet),]
TEMPLATES = {'userchoice': "account/userchoice.html",
             'user': "account/user.html",}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是:在UserChoiceForm(第一步)中,可以设置所需用户的数量.我想使用此值动态设置UserFormSet上的额外属性,以便在第二步中只显示所需数量的表单.

我试图通过覆盖向导的get_form()方法来做到这一点:

class MyUserWizard(SessionWizardView):
 def get_form(self, step=None, data=None, files=None):
     form = super(MyUserWizard, self).get_form(step, data, files)

     # Determine the step if not given
     if step is None:
         step = self.steps.current

     if step == 'user':
         # Return number of forms for formset requested 
         # in previous step.
         userchoice = self.get_cleaned_data_for_step('userchoice')
         num_users = userchoice['num_users']
         CoFunderFormSet.extra …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-formwizard

6
推荐指数
2
解决办法
2664
查看次数