django ModelForm 重写字段无效
我在我的一个模型里有一个ForeignKey
字段,我用ModelForm
来生成HTML。问题是,我想添加一个Other
选项——我打算加点JavaScript,这样当选择这个选项时,会出现一个文本框。
我在看这个链接:http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets,然后我尝试了一些东西,比如
class Event(models.Model):
name = models.CharField(max_length=200)
time = models.DateField()
.
.
.
cost = models.CharField(max_length=200)
affiliation = models.ForeignKey('Affiliation')
def __unicode__(self):
return self.name
class EventForm(ModelForm):
cost = models.TextField()
class Meta:
model = Event
我希望cost
变成一个文本框,而不是字符字段,所以输出应该是textarea
而不是input[type=text]
。但是,这个没有变化,也没有报错,实际上什么都没发生。我原本想继续做
class EventForm(ModelForm):
affiliations = list(Affiliation.objects.all()).append('Other')
affiliation = forms.CharField(choices=affiliations)
class Meta:
model = Event
我在GAE上使用django-nonrel,如果这有帮助的话,但我觉得这其实和模型没什么关系,所以我认为这不应该影响什么。任何帮助都非常感谢!
3 个回答
0
CharField可以有选项吗?Django的文档里有一个'ChoiceField',看起来这正是你想要的...
http://docs.djangoproject.com/en/1.2/ref/forms/fields/#charfield
1
你的问题是,EventForm把成本用一个 models.TextField()
覆盖了,但其实应该用 forms.CharField(widget=forms.Textarea())
。
2
我没有用过django-nonrel,所以这个建议你可以参考一下,但不一定适合你(因人而异)。
在你的 EventForm
定义中,你把 cost
设置成了 model.TextField
,但其实你应该把它设置成 forms.CharField
,并使用一个文本区域的输入框。