如何在Django中初始化ForeignKey ModelChoiceField?

时间:2011-04-23 23:50:35

标签: django forms foreign-keys widget

这必须在某个地方的Django文档中,但我似乎无法找到它。

说我有以下型号:

models.py

class MyModel(models.Model):
    name = models.CharField(max_length=15)

class MyOtherModel(models.Model):
    title = models.CharField(max_length=50)
    my_model = models.ForeignKey(MyModel)

我创建了一个表单,用于更改Select小部件的背景颜色:

forms.py

class MyOtherModelForm(ModelForm):
    my_model=ModelChoiceField(queryset=MyModel.objects.all())

    class Meta:
        model = MyOtherModel

    def __init__(self, *args, **kwargs):
        super(MyOtherModelForm, self).__init__(*args, **kwargs)
        self.fields['my_model'].widget = Select(attrs={'style':'background_color:#F5F8EC'})

在添加背景颜色代码之前,一切正常。一旦我添加该行,我就会出现一个彩色但未填充的选择小部件。我假设这是因为一旦我指定了小部件行为的某些方面,Django就会寻找要指定的所有内容。

那么如何告诉它使用MyModel中的值来填充Select小部件?

1 个答案:

答案 0 :(得分:3)

看看Overriding the default field types or widgets。基于此,我会尝试以下内容。

from django.forms import ModelForm, Select

class MyOtherModelForm(ModelForm):
    my_model=ModelChoiceField(queryset=MyModel.objects.all(), widget=Select(attrs={'style':'background_color:#F5F8EC'}))

    class Meta:
        model = MyOtherModel

同样将self.fields ['my_model']。queryset = MyModel.objects.all()添加到 init 也可能有效。