1

pkが割り当てられていない3つのmysqlテーブルがあり、テーブルAに一意の名前が含まれ、Bには別名と値1(テーブル1よりも長い)が含まれており、テーブルCは名前、値1、 (表Bより長い)。私はdjango smart_selectsが約束したことをするために、これらの関係のためのモデルとフォームを定義するためにフォーム(Djangoフォームまたはhtml選択フォーム)を作成するのに苦労しています。 https://github.com/digi604/django-smart-selects、私はネット上のドキュメントと多くの答えに従ってきました。しかし、私のアプリはまだ動作していません。私のコードはここにあります: この投稿にはタイプミスやスペースの問題があるかもしれませんが、それらは私のアプリケーションのエラーの原因ではありません。私のpython 2.7、ジャンゴ1、10、0 smart_selectsを設定、プロジェクトのURL(ないアプリのURL)に追加されるを使用しています などdjango smart_select app organization

models.py

class Names(models.Model): 
    name = models.CharField(max_length=150, unique=True) 
    class Meta: 
     db_table = 'A' 

class Foo(models.Model): 
    Name = models.ForeignKey(Names, to_field = 'name', db_column='name')# need to assign db_column or get error Name_id in fieldlist, it is possible that “to_field” is not needed here. But I am not sure 
    Val1 = models.BigIntegerField(blank=True, null=True) 

    class Meta: 
     db_table = 'B'     

class Foo2(models.Model): 
    name = models.ForeignKey(Names, db_column='name', to_field="name", related_name = 'name_') 
    VAL1 = ChainedForeignKey(Foo, chained_field="name", chained_model_field="Name", db_column='val1')#again, need to define db_column name or get error VAL1_id not in field list 

    class Meta: 
     db_table = 'C' 

forms.py -not現在このフォームを使って、viewとhtmlを見てください。

class SearchForm(ModelForm): 
    class Meta: 
     model = Foo2 
     fields = '__all__' 
#The form left like is will render empty select boxes. I have to define 
    def __init__(self, *args, **kwargs): 
     super(SearchForm, self).__init__(*args, **kwargs) 
     self.fields['name'] = forms.ModelChoiceField(Foo2.objects.all().values_list('name', flat=True)) 
#other form lines removed. 

とview.py

def index(request, name): 
    value = Foo2.objects.all().values('names', 'VAL1') 
    return render(request, 'index.html', {'form':value}) 

HTML

<form action="" method="POST">{% csrf_token %} 
<h3>Filters</h3> 
{% if form %} 

<select> 
{% for co in form %} 
<option value="{{ co.names }}">{{ co.names }}</option> 
{% endfor %} 
</select> 
<br> 
<select> 
{% for co in form %} 
<option value="{{ co.VAL1 }}">{{ co.VAL1 }}</option> 
{% endfor %} 
</select> 
{% endif %} 
<br> 
<input type="submit" value="Submit" class="submit" name="submit"> 
</form> 

コードを書いた後、私が実行した:

Python manage.py makemigrations app_name 
Python manage.py migrate --fake app_name 

アプリケーションの動作が、VAL1選択ボックスはフィルタリングされません(smart_select functイオン性が働いていない)。モデル/アプリのデザインに何か問題があるかどうかを知る必要があります。

ありがとうございます

答えて

0

私は同じ問題があります。どうやら、smart_selectsは 'to_field'でForeignKeysを処理できません。また、管理ページにアクセスして、そこでドロップダウンメニューが機能するかどうかを確認してください。私がしたのは、テストアプリケーションでチュートリアルを正確に行うことでした。テストモデルでsmart_selectsが機能するかどうかを確認し、モデルをプラグインして確認します。

私の場合、テストモデルは機能しましたが、自分のモデルはそうではありませんでしたが、 'to_field'を削除すると機能しました。私はソースコードを読んで、回避策が見つかるかどうか確認します。

+0

ForeignKey(to_field = name)を使用する代わりに、 'name'をmodels.pyの主キーに設定する必要があります。例: 'name = models.CharField(max_length = 3、unique = True、primary_key = True)'。それは私のためにそれを解決しました。 – irene