私はスマートセレクトを使用しています。django smart-selectとmodelformの使い方は?
編集は:
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)
形態:ここでは、@Evangelos
models.pyおかげテンプレートに{{form.media.jsを}}添加した後、私のために動作するコードであります.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'),
]
編集:私はそれが管理者に罰金働いてい
:ここには問題だった
- ChoixTangenteインスタンスを作成する
- ChoixModele インスタンスを作成し、リスト内のChoixTangentesインスタンスを選択します
- ChoixTangenteのリストで "tangente"を選択し、ステップ1)とステップ2の結果であるChoixModeleの選択肢のリストで "type_modele"を選択してTypeModeleインスタンスを作成できます。 2)
私は、ユーザーがフォームを使用して同じことを持つようにシューッという音。しかし、私はそれを働かせることはできません。
"Tangente"フィールドにChoixTangenteのリストが設定されますが、値を選択すると、対応する選択肢のリストを表示する代わりに、 "type_modele"フィールドが空のままになります。
see form screenshot for the users
ありがとうEvangelos。 {{form.media.js}}をテンプレートに追加しました。コードは私のために働いています。私は働くコードで投稿を編集しました。 (Appareil Modeleは私の記事の間違いだったが、そこには何もなかった) –