我的form.py
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 :(得分: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})
我创建Options模型以包含初始变量,如果变量在views.py上,则迁移工作正常...