Как инициализировать ForeignKey ModelChoiceField в Django? - PullRequest
1 голос
/ 24 апреля 2011

Это должно быть где-то в документации 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)

И я создаю форму, в которой меняю цвет фона виджета «Выбор»:

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 Ответ

3 голосов
/ 24 апреля 2011

Взгляните на Переопределение типов полей по умолчанию или виджетов .Исходя из этого, я бы попробовал следующее.

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 также может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...