django ModelForm 重写字段无效

1 投票
3 回答
2856 浏览
提问于 2025-04-16 08:55

我在我的一个模型里有一个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,并使用一个文本区域的输入框。

撰写回答