簡體   English   中英

編輯實例時未選擇 Django 表單選擇字段值

[英]Django Form Choice Field Value Not Selected when Editing Instance

我有一個用於更新數據的簡單表單。

所有數據都從數據庫正確加載,但是我的選擇字段(下拉菜單)中的當前值是唯一一個最初沒有用當前值選擇的值。

我的 Django 表單:

class MyForm(forms.ModelForm):  

def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)

choices = (
  ('', 'Select'),
  ('1', 'Option 1'),
  ('2', 'Option 2'),
  )

self.fields['myfield'] = forms.ChoiceField(
                        required=True,
                        error_messages = {'required': 'Field is Required!'},
                        label='My Label',
                        choices=choices,)
...

我的目標是選擇當前值。 例如,如果當前值為2我希望在初始加載時選擇Option 2與當前表單一樣,初始實例值由於某種原因未選擇。

我認為您誤解了初始值和實例的值。

假設您有一個myfield = '2'的模型實例,您不需要劫持__init__()下的表單,而只需在forms.ChoiceField下聲明choices ,它就會起作用。

看這個例子:

In [1]: from django import forms

In [2]: from django.db import models

In [3]: class MyModel(models.Model):
   ...:     myfield = models.CharField(max_length=5, blank=True, default='')
   ...:     class Meta:
   ...:         app_label='test'

In [4]: class MyForm(forms.ModelForm):
   ...:     choices = (('', 'Select'), ('1', 'Option 1'), ('2', 'Option 2'),)
   ...:     myfield = forms.ChoiceField(choices=choices)
   ...:     class Meta:
   ...:         model = MyModel
   ...:         fields = ['myfield']
   ...:

In [5]: a = MyModel(myfield='2')

In [6]: f = MyForm(instance=a)

In [7]: print f
<tr><th><label for="id_myfield">Myfield:</label></th><td><select id="id_myfield" name="myfield">
<option value="">Select</option>
<option value="1">Option 1</option>
<option value="2" selected="selected">Option 2</option>
</select></td></tr>

如您所見,表單字段myfield將是Selected

如果實例提供的值不作為模型中定義的可接受選擇包括在內,則表單將不會從模型實例繼承值,而是表單將表現得與空白表單相同。

(也感謝 WayBehind 評論)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM