表单在管理员中正常工作但在模板中不正确
Form works in Admin correctly but not in Template
我正在尝试使用 Django-smart-selects
,它应该允许您创建链式 forms
。
所以我决定在添加到我的项目之前先在一个简单的例子上尝试一下。问题是它在 Admin
中正常工作,但在模板中不起作用(使用视图方法呈现)。
它不会引发任何错误,但当我在大洲下拉菜单中选择 Continent
时,它不会填充 Country
下拉菜单。
请注意,问题可能不在 MODELS.PY 中,因为它在管理员中可以正常工作。
有 3 个位置:
- 美国 - 纽约
- 美国 - 德州
- 非洲 - 摩洛哥
有两种形式 - 大陆和国家。如果我没有选择 Continent
,我将无法选择任何国家。如果我选择 America,第二个菜单会显示 NewYork 和 Texas,这是正确的。这是在管理中。在模板中,我可以选择 Continent
代码如下:
FORMS.PY:
class LocationForm(forms.ModelForm):
class Meta:
model = Location
fields = ('newcontinent','newcountry',)
VIEWS.PY:
def test(request):
location_form = LocationForm()
if request.method=='POST':
print request.cleaned_data
return render(request,'test.html', context={'location_form':location_form})
ADMIN.PY:
...
admin.site.register(Continent)
admin.site.register(Country)
admin.site.register(Location)
...
URLS.PY:
...
url(r'^chaining/', include('smart_selects.urls')),
...
TEST.HTML:
{% extends "base.html" %}
{% block content %}
<form action="" method="post">{% csrf_token %}
{{ location_form }}
</form>
{% endblock %}
MODELS.PY:
class Continent(models.Model):
name = models.CharField(max_length=40)
def __str__(self):
return self.name
class Country(models.Model):
name = models.CharField(max_length=40)
continent = models.ForeignKey(Continent)
def __str__(self):
return self.name
from smart_selects.db_fields import ChainedForeignKey
class Location(models.Model):
newcontinent = models.ForeignKey(Continent)
newcountry = ChainedForeignKey(
Country, # the model where you're populating your countries from
chained_field="newcontinent", # the field on your own model that this field links to
chained_model_field="continent", # the field on Country that corresponds to newcontinent
show_all=True, # only shows the countries that correspond to the selected continent in newcontinent
)
您必须在 test.html 中将表单媒体加载为 {{ form.media }} 或您的情况 {{ location_form.media }} 以便包含 javascript/css 个文件。
我正在尝试使用 Django-smart-selects
,它应该允许您创建链式 forms
。
所以我决定在添加到我的项目之前先在一个简单的例子上尝试一下。问题是它在 Admin
中正常工作,但在模板中不起作用(使用视图方法呈现)。
它不会引发任何错误,但当我在大洲下拉菜单中选择 Continent
时,它不会填充 Country
下拉菜单。
请注意,问题可能不在 MODELS.PY 中,因为它在管理员中可以正常工作。
有 3 个位置:
- 美国 - 纽约
- 美国 - 德州
- 非洲 - 摩洛哥
有两种形式 - 大陆和国家。如果我没有选择 Continent
,我将无法选择任何国家。如果我选择 America,第二个菜单会显示 NewYork 和 Texas,这是正确的。这是在管理中。在模板中,我可以选择 Continent
代码如下:
FORMS.PY:
class LocationForm(forms.ModelForm):
class Meta:
model = Location
fields = ('newcontinent','newcountry',)
VIEWS.PY:
def test(request):
location_form = LocationForm()
if request.method=='POST':
print request.cleaned_data
return render(request,'test.html', context={'location_form':location_form})
ADMIN.PY:
...
admin.site.register(Continent)
admin.site.register(Country)
admin.site.register(Location)
...
URLS.PY:
...
url(r'^chaining/', include('smart_selects.urls')),
...
TEST.HTML:
{% extends "base.html" %}
{% block content %}
<form action="" method="post">{% csrf_token %}
{{ location_form }}
</form>
{% endblock %}
MODELS.PY:
class Continent(models.Model):
name = models.CharField(max_length=40)
def __str__(self):
return self.name
class Country(models.Model):
name = models.CharField(max_length=40)
continent = models.ForeignKey(Continent)
def __str__(self):
return self.name
from smart_selects.db_fields import ChainedForeignKey
class Location(models.Model):
newcontinent = models.ForeignKey(Continent)
newcountry = ChainedForeignKey(
Country, # the model where you're populating your countries from
chained_field="newcontinent", # the field on your own model that this field links to
chained_model_field="continent", # the field on Country that corresponds to newcontinent
show_all=True, # only shows the countries that correspond to the selected continent in newcontinent
)
您必须在 test.html 中将表单媒体加载为 {{ form.media }} 或您的情况 {{ location_form.media }} 以便包含 javascript/css 个文件。