Skip to main content
 首页 » 编程设计

python之Django 。如何连接下拉列表(来自 html)和表单

2025年05月04日37傻小

A 在模型中有一个字段(名称模型是 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> 

保存表单的 View :

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> 
... 

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

感谢您的回答。

请您参考如下方法:

你需要定义一个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 :

Wrapper around three Select widgets: one each for month, day, and year.

另见:

希望对您有所帮助。