2016-02-01 4 views
0

Мои form.pyInitialize ModelChoiceField в форме

class BannerForm(forms.ModelForm): 
    name = forms.CharField(max_length=32) 
    affiliation = forms.ModelChoiceField(Affiliation.objects.all(), disabled = True, initial='Red') 

Мой model.py

class Affiliation (models.Model): 
    name = models.CharField(max_length=32, unique=True) 
    def __str__(self): 
     return self.name 

class Banner(models.Model): 
    name = models.CharField(max_length=32, unique=True) 
    affiliation = models.ForeignKey(Affiliation) 

Мой populate скрипт (для запуска при начинают заполнять базу данных)

def populate(): 
    red = add_affiliation('Red') 
    black = add_affiliation('Black') 

Когда я заполнить форму для создания баннера он не работает, он не видит красный (или ред), как действительный выбор:

<ul class="errorlist"><li>affiliation<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul> 

Я изменил мою form.py:

class BannerForm(forms.ModelForm): 
     name = forms.CharField(max_length=32) 
affiliation = forms.ModelChoiceField(Affiliation.objects.all(), disabled = True, initial=Affiliation.objects.get(id=1)) 

И дают ту же ошибку. Я снова изменился:

class BannerForm(forms.ModelForm): 
     name = forms.CharField(max_length=32) 
     affiliation = forms.ModelChoiceField(Affiliation.objects.all(), widget=forms.HiddenInput(), initial=Affiliation.objects.get(id=1)) 

это работает, но только если я изменить код, когда база данных уже существует, потому что если не моя первая миграция дает ошибку:

django.db.utils.OperationalError: no such table: core_affiliation 

Как я могу решить? Я бы предпочел не использовать HiddenInput и, если это возможно, не кодировать id.

Спасибо

+0

Может быть, вам нужна дополнительная информация? – fabio

ответ

0

Я разрешил. Отключенное поле не может использоваться для передачи данных, поэтому я добавляю поле для отображения данных и другое (скрытое), чтобы фактически передавать данные.

form.py 

class BannerForm(forms.ModelForm): 
    name = forms.CharField(max_length=32) 
    Affiliazione = forms.CharField(disabled = True, required=False) 
    affiliation = forms.ModelChoiceField(Affiliation.objects.all(), 
    widget=forms.HiddenInput()) 

Я инициализировать их в views:

def add_banner(request): 
    if request.method == 'POST': 
     #some code 
    else: 
     options = Options.objects.get(id=1) 
     form = BannerForm(request.POST or None, initial={ 
      'Affiliazione': options.new_affiliation, 
      'affiliation': options.new_affiliation}) 
    return render(request, 'core/add_banner.html', {'form': form}) 

Я создаю Параметры модели, чтобы содержать исходную переменную и, если переменная находятся на views.py миграции хорошо работать ...

Смежные вопросы