【问题标题】:Django. How to connect drop-down list (from html) and forms?姜戈。如何连接下拉列表(来自html)和表单?
【发布时间】:2014-07-05 21:24:10
【问题描述】:

模型中有一个字段(模型名称为 Users_data):

bir_date = models.DateField(verbose_name="")

以及代表模型的表格:

class Form_registration (ModelForm):
class Meta:
    model = Users_data

在 html 中:

<form name="registration" method="post" action="save_data_user/">
{% csrf_token %}
{{ form_registration.as_p }}
<input type="submit" value="SignUp">
</form>

查看保存表单:

def saves_data_user_on_registration (request):
if request.method == 'POST':
    c = {}
    c.update(csrf(request))
    form_user_data = Form_registration(request.POST, request.FILES)
    if form_user_data.is_valid():
        print form_user_data.errors
        form_user_data.save()
        return render_to_response('see_you_later.html', c,           context_instance=RequestContext(request))
    else:
        print form_user_data.errors
        return render_to_response('error.html', c, context_instance=RequestContext(request))

我可以在表单中保存简单的数据。

但我需要在我的模型 Users_data 的字段中的 html 下拉列表中保存数据。

<select name="DateOfBirth_Month">
<option>Month</option>
<option value="1">January</option>
<option value="2">February</option>
...



 <select id="cd-dropdown" class="cd-select">
 <option value="-1" selected>Day</option>
 <option value="1">01</option>
 <option value="2">02</option>
 ...

<select name="DateOfBirth_Year">
<option>Year</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
...

而且我不明白如何将下拉列表与我的表单或模型联系起来。

感谢您的回答。

【问题讨论】:

    标签: python django django-forms django-templates django-widget


    【解决方案1】:

    您需要定义一个widget 并使用widgets on the Meta classDateField 设置它。

    可以在 Django documentation 中找到将年、月和日拆分为单独下拉列表的特定小部件的一个很好的示例,请参阅 DateSelectorWidget

    class Form_registration (ModelForm):
        class Meta:
            model = Users_data
            widgets = {'bir_date': widgets.DateSelectorWidget()}
    

    此代码假设您创建了一个 widgets.py 模块,其中包含 DateSelectorWidget 类。

    另一个很好的任务小部件是django.forms.extras.widgets.SelectDateWidget

    围绕三个 Select 小部件进行包装:月、日和日各一个 年。

    另见:

    希望对您有所帮助。

    【讨论】:

    • 感谢您的回答,但我有一个错误:在 widgets.py 中找不到参考“DateSelectorWidget”
    • 虽然我正在导入小部件 - 从 django.forms 导入小部件
    • @user3636189 如果你想使用第一个选项,拥有DateSelectorWidget 自定义小部件,你应该在widgets.py 文件中创建它然后导入它。但是,我会先尝试django.forms.extras.widgets.SelectDateWidget
    【解决方案2】:

    答案是在模型中为您的DateField 使用选择属性。

    操作方法如下:https://docs.djangoproject.com/en/dev/ref/models/fields/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 2016-12-22
      • 2015-05-23
      • 1970-01-01
      相关资源
      最近更新 更多