2016-09-30 8 views
0

私はスマートセレクトを使用しています。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'), 

] 

編集:私はそれが管理者に罰金働いてい

:ここには問題だった

  1. ChoixTangenteインスタンスを作成する
  2. ChoixModele インスタンスを作成し、リスト内のChoixTangentesインスタンスを選択します
  3. ChoixTangenteのリストで "tangente"を選択し、ステップ1)とステップ2の結果であるChoixModeleの選択肢のリストで "type_modele"を選択してTypeModeleインスタンスを作成できます。 2)

see Admin form screenshot

私は、ユーザーがフォームを使用して同じことを持つようにシューッという音。しかし、私はそれを働かせることはできません。

"Tangente"フィールドにChoixTangenteのリストが設定されますが、値を選択すると、対応する選択肢のリストを表示する代わりに、 "type_modele"フィールドが空のままになります。

see form screenshot for the users

答えて

1

まず第一に、あなたの意見は?

より理解しやすくするため、ファイルで完全な質問を投稿してください。

ここで、forms.pyで参照しているmodels.pyのAppareilモデルはありますか?

あなたのフィールドはリスト[]にする必要があります。

あなたforms.pyは、次のようになります。JavaScriptを記述する必要はありません

from django import forms 

from .models import Modele 

class AppareilForm(forms.ModelForm): 
    class Meta: 
     model = Modele 
     fields =['tangente', 'modele'] 

はちょうどあなたのビューであなたのurls.pyに

をURL(R '^チェーン/'、( 'smart_selects.urls')を含める)を含めることを忘れないでください詳細については、ビューでフォームについてのAppareilForm Readを呼び出します。

テンプレートでは、javascriptを読み込む前に{{form.as_p}}と{{form.media.js}}を使用し、テンプレートに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> 

のようになります。

+0

ありがとうEvangelos。 {{form.media.js}}をテンプレートに追加しました。コードは私のために働いています。私は働くコードで投稿を編集しました。 (Appareil Modeleは私の記事の間違いだったが、そこには何もなかった) –

関連する問題