前のフィールドからの入力に基づいてModelFormフィールドを動的に変更する方法を理解しようとしています。
たとえば、私がこれらの種類のモデルを持っている場合:
class Phone(models.Model):
name = models.CharField(max_length=10)
class Series(models.Model):
name = models.CharField(max_length=10)
class Manufacturer(models.Model):
phone = models.ForeignKey('Phone')
series = models.ForeignKey('Series')
class ManufacturerForm(ModelForm):
class Meta:
model = Manufacturer
これにより、データベース内の電話およびシリーズエントリのドロップダウンオプションを含むフォーム(ManufacturerForm)が生成されます。たとえば、ユーザーのseries
入力に基づいて異なるエントリのセットを作成することは可能ですか?phone
このブログ投稿__init__
で読んだ内容に基づいて、この方法を使用してこれを実現する方法について読みましたが、シナリオを考えると、これを実行する方法がわかりません。それとも、あなたが取ったこれを達成するためのより良い方法がありますか?アドバイスありがとうございます!
編集:フォームのビューを追加しました。
def make_ad(request):
if request.method == 'POST':
form = ManufacturerForm(request.POST, request.FILES)
if form.is_valid():
a = form.save()
a.user = request.user
a.save()
else:
form = ManufacturerForm()
variables = RequestContext(request, {
'form': form
})
return render_to_response('place.html', variables)
@ super9は、これらの要素を変更するためにajaxリクエストを使用することに言及しました。確認する必要がありますif request.is_ajax()
が、どの時点で確認する必要がありますか?そして、ajaxリクエストに基づいてクエリセットを追加または変更するにはどうすればよいですか?
アドバイスありがとうございます。
編集:django-smart-selectsを使おうとしています
私が試していることを達成するためにdjango-smart-selectsを利用するようにモデルを設定する方法がわかりません。モデルを構造化した方法は次のとおりです。
from smart_selects.db_fields import ChainedForeignKey
class Phone(models.Model):
phone = models.CharField(max_length=10)
class Series(models.Model):
series = models.CharField(max_length=10)
phone = models.ForeignKey(Phone)
class SeriesModel(models.Model):
model = models.CharField(max_length=10)
series = models.ForeignKey(Series)
class Manufacturer(models.Model):
phone = models.ForeignKey(Phone)
series = ChainedForeignKey (Series, chained_field = "phone", chained_model_field = "phone")
series_model = ChainedForeignKey (SeriesModel, chained_field = "series", chained_model_field = "series")
しかし、フォーム(ModelForm)を表示すると、のフィールドがにseries_model
正しくチェーンされていませんseries
。スマートセレクトを抽象化の第2層で機能させるための何かが欠けていますか?
編集:上記のコードが機能するようになりました。