我正在使用智能选择。
编辑:在模板中添加{{form.media.js}}后,以下代码对我有用,感谢@Evangelos
models.py:
from django.db import models
from smart_selects.db_fields import ChainedForeignKey, ChainedManyToManyField
class ChoixTangente(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class ChoixModele(models.Model):
name = models.CharField(max_length=255)
tangentes = models.ManyToManyField('Choixtangente', blank=True)
def __str__(self):
return self.name
class TypeModele(models.Model):
tangente = models.ForeignKey(ChoixTangente, blank=True, null=True)
type_modele = ChainedForeignKey(
ChoixModele,
chained_field="tangente",
chained_model_field="tangentes",
show_all=False,
auto_choose=True,
blank=True, null=True
)
def __unicode__(self):
return str(self.pk)
form.py:
from django import forms
from .models import ChoixTangente, ChoixModele, TypeModele
class TypeModeleForm(forms.ModelForm):
class Meta:
model = TypeModele
fields = ('tangente', 'type_modele')
views.py
from .models import ChoixTangente, ChoixModele, TypeModele
from .forms import TypeModeleForm
def type_modele_new(request):
if request.method == "POST":
form = TypeModeleForm(request.POST)
if form.is_valid():
modele_instance = form.save()
return redirect('calculs.views.type_modele_detail', pk=modele_instance.pk)
else:
form = TypeModeleForm()
return render(request, 'calculs/type_modele_new.html', {'form': form})
def type_modele_detail(request, pk):
modele_instance = get_object_or_404(TypeModele, pk=pk)
return render(request, 'calculs/type_modele_detail.html', {'modele_instance': modele_instance})
模板:type_modele_new.html
{% load staticfiles %}
<form method="POST">
{% csrf_token %}
**{{ form.media.js }}**
{{ form.as_p}}
<input type="submit" value="Submit">
</form>
urls.py
from django.conf.urls import url, include
from . import views
from smart_selects import urls as smart_selects_urls
urlpatterns = [
url(r'^chaining/', include('smart_selects.urls')),
url(r'^type_modele/new/$', views.type_modele_new, name='modele_new'),
url(r'^type_modele/(?P<pk>[0-9]+)/$', views.type_modele_detail, name='modele_detail'),
]
编辑:这就是问题所在:
我在管理员工作正常:
我希望让我的用户通过表单执行相同的操作。但我不能让它发挥作用。
字段“Tangente”填充了ChoixTangente列表但是当我选择一个值时,字段“type_modele”保持为空而不是显示相应选项的列表。
答案 0 :(得分:2)
首先,您的观点在哪里?
尝试使用文件发布更完整的问题,以便更好地理解。
您在forms.py?
中引用的models.py中的模型Appareil在哪里你的字段应该在列表[]中。
您的forms.py应如下所示:
from django import forms
from .models import Modele
class AppareilForm(forms.ModelForm):
class Meta:
model = Modele
fields =['tangente', 'modele']
您不需要编写javascript。
请记住将url(r'^ chaining /',include('smart_selects.urls'))添加到您的urls.py
在您的视图中调用AppareilForm阅读有关视图中的表单的详细信息。
在模板中使用{{form.as_p}}和{{form.media.js}}之前加载javascript并确保在模板中加载static。 {%load static%}
您的模板应该看起来像这样
{% load static % }
<form action="your url that points to your view" method="POST">
{% csrf_token %}
{{ form.media.js }}
{{ form.as_p}}
<input type="submit" value="Submit">
</form>
仔细阅读django-choices描述。