0

選択した「国」に基づいて「都市」ドロップダウンを更新するにはどうすればよいですか?これを容易にするためにDjango上に構築されたものはありますか?

class Country(models.Model):
    name            = models.CharField(max_length=50)
    ...

class City(models.Model):
    name         = models.CharField(max_length=50)
    country      = models.ForeignKey(Country)

class UserProfile(models.Model):
    ...
    country             = models.ForeignKey(Country, default=1)
    city                = models.ForeignKey(City, default=1)
    user                = models.OneToOneField(User)

そして私の見解では:

{{ profile_form.country }}
{{ profile_form.city }}

ただし、すべての都市が一度に表示されます。

お知らせ下さい。

4

3 に答える 3

2

私の答えは少し長いので、あなたが探しているものに正確に答えるこの実装を見てみることをお勧めします。

于 2013-01-23T23:44:06.760 に答える
2

django-smart-selectsを使用します。フォームフィールドを更新するためのjs機能が含まれており、javascriptを使用してajax呼び出しを作成する時間を大幅に節約できました。サンプルプロジェクトには、上記と同様のユースケースが含まれています。おそらく次のようになります。

from smart_selects.db_fields import ChainedForeignKey 

class City(models.Model):
    name = models.CharField(max_length=50)
    country = models.ForeignKey(Country)

class UserProfile(models.Model):
    country = models.ForeignKey(Country)
    city = ChainedForeignKey(City, chained_field="country", chained_model_field="country")

ドキュメントから:

連鎖フィールドは、同じモデル上のフィールドであり、フィールドも連鎖する必要があります。連鎖モデルフィールドは、連鎖フィールドによってリンクされたモデルにも対応する連鎖モデルのフィールドです。

于 2013-01-24T02:55:20.703 に答える
1

これは、クライアントのコンピューターでJavaScriptで実行したいことのようです。Webサーバー(Djangoを実行しているマシン)は、ユーザーが[送信]をクリックするまで、ドロップダウンメニューでいつユーザーが選択したかを知りません。(これにより、WebサーバーにHTTP POSTリクエストが送信され、そのフォームのすべてのパラメーターが渡されます)。

javascriptでは、関数を登録して、[国]ドロップダウンが変更されたときに、[都市]ドロップダウンリストが動的に再入力されるようにすることができます。

お役に立てれば!

于 2013-01-24T00:23:59.047 に答える