【问题标题】:Initial values in django formsdjango 表单中的初始值
【发布时间】:2013-02-22 07:18:24
【问题描述】:

大家好,这里是我的代码

class F1articles(forms.Form):
  heading=forms.CharField(max_length=100)
  content=forms.CharField(widget=forms.Textarea)
class F2articles(forms.Form):
  country=forms.CharField(max_length=100)
  work=forms.CharField(max_length=100)

这是在 Urls.py 中

url(r'^create/(?P<project_id>\d+)/$', FarticlesWizard.as_view([F1articles, F2articles]))

这是我的看法

class FarticlesWizard(SessionWizardView):
def done(self,form_list,**kwargs):
    form_dict={}
    Varticles_obj=None

    for x in form_list:
        form_dict=dict(form_dict.items()+x.cleaned_data.items())

    if kwargs.has_key('project_id'):
        Varticles_obj=Marticles.objects.get(id=kwargs['project_id'])
        Varticles_obj.heading=form_dict['heading']
        Varticles_obj.content=form_dict['content']
        Varticles_obj.country=form_dict['country']
        Varticles_obj.work=form_dict['work']
        Varticles_obj.modified_on=datetime.datetime.now()
        Varticles_obj.modified_by=self.request.user.username
        Varticles_obj.save()
        return HttpResponseRedirect('/display/')
    else:       
        insert_db=Marticles(heading = form_dict['heading'],
        content = form_dict['content'],
          country=form_dict['country'],work=form_dict['work'],created_by=self.request.user)
        insert_db.save()
        return HttpResponseRedirect('/display/')

这可以正常工作,没有问题,但是我想在调用 url 时为表单字段设置初始值,有没有办法解决这个问题?

【问题讨论】:

  • 嗨,Rohan,问题更新了,,,,请检查,,,

标签: django django-models django-forms django-views django-formwizard


【解决方案1】:

您可以实现WizardView.get_form_initial(step) 方法为向导的每个步骤提供初始数据。

类似:

class FarticlesWizard(SessionWizardView):
    def get_form_initial(self, step):
        init_dict = {}
        #get object to populate data
        if step == '1':
            init_dict = { 'heading': obj.heading, 'content' : obj.content }
        if step == '2':
            init_dict = { 'country': obj.country, 'work' : obj.work }

        return init_dict

我不确定你如何在这个方法中从 url 获取project_id 来查询对象。

【讨论】:

  • 嗨 Rohan,我尝试了你的方法,但我收到错误 get_form_initial() takes exactly 1 argument (2 given) 并且我正在从这里获取项目 ID kwargs['project_id']
  • @Friend,它也应该带self参数,检查更新的定义。
  • 嗨,Rohan,我试过你的方法,它没有采用初始值,但显示了带有空数据的表单,并且在提交FarticlesWizard class has not defined a done() method, which is required时也出错了
  • @Friend,您的观点中没有done() 方法吗,正如您所质疑的那样?
  • 嗨,rohan,非常感谢您的尝试,我现在可以正常工作了,我已经发布了答案......
【解决方案2】:

嗯,我搞定了,让我回答我自己的问题,..这里是代码...

    def get_form_initial(self,step):

    if 'project_id' in self.kwargs:
        project_id=self.kwargs['project_id']
        article=Marticles.objects.get(id=project_id)
        project_dict = model_to_dict(article)
        return project_dict
    else:
        return self.initial_dict.get(step,{})

我认为这对你很有帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多