0

モデルによって作成されたデータベースから値を取得するフォームがあります。テーブルに都市とコードの2つの列があり、ModelChoiceFieldを使用してフォームに都市だけを表示するとします。

使用者がフォームを送信し、検証プロセスを実行しているときに、ユーザーが選択した都市の値をそのコードで変更したいと思います。

models.py

class Location(models.Model):
    city                = models.CharField(max_length=200)
    code                = models.CharField(max_length=10)

    def __unicode__(self):
        return self.city

forms.py

city = forms.ModelChoiceField(queryset=Location.objects.all(),label='City')

views.py

def profile(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST)
        if form.is_valid():

            ???????

どうすればこれを行うことができますか?

ありがとう-オリ

4

2 に答える 2

3

あなたはこれを行うことができます:

def profile(request):
if request.method == 'POST':
    form = ProfileForm(request.POST)
    if form.is_valid():
        profile = form.save(commit=False)

        #Retrieve the city's code and add it to the profile
        location = Location.objects.get(pk=form.cleaned_data['city'])

        profile.city = location.code
        profile.save()

ただし、ModelChoiceFieldで直接コードを設定するフォームを持つことができるはずです。こちらとdjangoのドキュメントを確認してください

于 2012-08-16T07:49:35.673 に答える
0

フォームのsaveメソッドを上書きします。そこでフィールドを変更します。そうすれば、フォームに関連するすべてのロジックがフォーム内に含まれたままであるというクリーンなビューが得られます。

于 2012-08-16T09:22:04.590 に答える