2016-02-01 67 views
0

form.py初始化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') 

当我填写表格创建一个横幅它不起作用,它不会看到红色(或ED)像一个有效的选择:

<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迁移工作做好......