我是Django的新手。我有一个表单,希望将模型项的“ id”列表作为CheckboxSelectMultiple字段的选择。这是我的例子
Models.py
class TryDjango(models.Model):
name = models.CharField(max_length=120)
Views.py
class trydjango_view(View):
template_name = 'trydjango.html'
failed_template = 'generic_error.html'
viewContext = {
"title" : "Page title ",
"columnNames" : ["Name"],
"url" : 'trydjango',
'loginInfo' : 'logout',
}
def get(self, request):
self.viewContext['deleteTryDjangoForm'] = \
deleteTryDjangoForm(prefix='delete')
login_result = getLogin(request)
self.viewContext.update({'loginInfo' : login_result['loginInfo']})
return render(request, self.template_name, self.viewContext)
trydjango.html模板
{% block tableHeader %}
<tr>
{% if user.is_authenticated %}
<td>
<form id="delItem" action="" method="post">
{% csrf_token %}
<input type="submit" value="Delete Django"
name="{{deleteTryDjangoForm.prefix}}"/>
</form>
</td>
{% endif %}
{% for columnName in columnNames %}
<th>{{columnName}}</th>
{% endfor %}
</tr>
{% endblock %}
ModelForms.py
class deleteTryDjangoForm(forms.ModelForm):
myPrefix ='delete-'
class Meta:
model = TryDjango
fields = ['id']
def __init__(self, *args, **kwargs):
super(deleteTryDjangoForm,self).__init__(*args, **kwargs)
sportSeriesList = listOfSportSeries()
print(sportSeriesList)
self.fields['id'].widget = \
forms.CheckboxSelectMultiple(choices=[(1,1)]) #<<-- Line 399 in the error
最后我得到的错误
KeyError at /trydjango/
'id'
Request Method: GET
Request URL: http://127.0.0.1:8000/trydjango/
Django Version: 2.0.7
Exception Type: KeyError
Exception Value: 'id'
Exception Location: /Users/sbt/dev/trydjango/src/myPrjApp/modelforms.py in __init__, line 399
第399行是我的表单中的“ forms.CheckboxSelectMultiple(choices = [(1,1)])”行。
如果我将字段从“ id”更改为“ name”,则表单不会给出此错误。我还有一些其他模型的主键不是'id'字段。我可以使用相应的主键删除这些模型项。但是,仅当主键为“ id”时,表单才会失败。
请帮助我纠正我的错误。
谢谢
答案 0 :(得分:0)
模型中的id
是不可编辑的,因此ModelForm不会为其创建字段。
无论如何,您这里不需要ModelForm。这是用于创建新实例或编辑现有实例。您只需要一个标准表格。
class deleteTryDjangoForm(forms.ModelForm):
id = fields.MultipleChoiceField(
choices=[(1,1)],
widget=forms.CheckboxSelectMultiple
)