如何修复Meta.fields不能为字符串。你是想输入: ('name')吗?
目前我有一个脚本,可以让用户通过表单添加新的酒店。以下是这个脚本。
我遇到了一个错误,提示信息是:AddHotelForm.Meta.fields 不能是一个字符串。你是不是想写成:('name',)?
请求方法:GET
请求网址:8000/hotel/new
Django版本:1.6.2
异常类型:TypeError
异常内容:
AddHotelForm.Meta.fields 不能是一个字符串。你是不是想写成:('name',)?
异常位置:/usr/local/lib/python2.7/dist-packages/django/forms/models.py 的 new 函数,261行
我似乎搞不懂这个问题。我检查了好几次,但还是找不到解决办法。
views.py
from django.shortcuts import render_to_response
from forms import AddHotelForm
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf
from hotel.models import hotel
def create(request):
if request.POST:
form = AddHotelForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/articles/all/')
else:
form = AddHotelForm()
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('add_hotel.html', args)
models.py
from django.db import models
from user.models import user
class hotel(models.Model):
publisher = models.ForeignKey(user)
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100)
creation_date = models.DateField(auto_now_add=True)
def __unicode__(self):
return self.name
forms.py
from django import forms
from models import hotel
class AddHotelForm(forms.ModelForm):
class Meta:
models = hotel
fields = ('name')
add_hotel.html
{% block content%}
<html>
<head>
<title></title>
<style type="text/css">
li {
padding:5px;
margin-bottom: 5px;
list-style: none;
}
.errorlist {
background-color: red;
color:white;
padding: 1px;
width:150px;
margin-bottom: 5px;
font-size: 12px;
font-family: arial, serif;
}
label {
display: block;
font-size: 12px;
font-family: arial, serif;
}
</style>
</head>
<body>
<form action="/hotel/new/" method="post">
{% csrf_token %}
<uL style="display:block;">
{{form.as_ul}}
</ul>
<input type="submit" name="submit" value="Create Hotel">
</form>
</body>
</html>
{% endblock%}
1 个回答
24
所以这个问题看起来正是错误信息中所说的那样。
你的问题在于这个:
("name")
和这个是不一样的:
("name",)
试试看:
>>> type(("name"))
<type 'str'>
>>> type(("name",))
<type 'tuple'>
所以要解决这个问题,你需要修改你的表单定义:
class AddHotelForm(forms.ModelForm):
class Meta:
models = hotel # This should be "model" not "models".
fields = ('name',)