姜戈。如何连接下拉列表(来自html)和表单?

Posted

技术标签:

【中文标题】姜戈。如何连接下拉列表(来自html)和表单?【英文标题】:Django. How to connect drop-down list (from html) and forms? 【发布时间】: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>
...

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

感谢您的回答。

【问题讨论】:

【参考方案1】:

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

可以在 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 小部件进行包装:月、日和日各一个 年。

另见:

Django SelectDateWidget to show month and year only django-datetime-widget

希望对您有所帮助。

【讨论】:

感谢您的回答,但我有一个错误:在 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/

【讨论】:

以上是关于姜戈。如何连接下拉列表(来自html)和表单?的主要内容,如果未能解决你的问题,请参考以下文章

来自 web api 的 asp.net web 表单下拉列表

基于其他下拉列表的 ajax 和 jQuery 动态下拉列表(来自数据库的数据)

在同一页面上提交表单时如何预填充下拉列表?

Laravel:填写一个包含多个下拉列表的表单

如何从超大数据表中填充下拉列表?

如何访问 thymeleaf 模型属性(专门来自对象的列表)以填充 html 下拉列表?