无法保存表单我认为表单无效我怎样才能使其有效?

时间:2017-11-11 20:56:54

标签: django django-forms

视图

def createitem(request):
if request.method == "POST":
    form= itemform(request.POST, request.FILES)
    if form.is_valid():
        form.save()
    return Redirect('/items')
else:    
    form = itemform()
    return render(request, 'app/create.html', {'form':form})

如果您发现错误,可以使用模型

class items(models.Model):
    name = models.CharField(max_length = 30)
    description = models.TextField()
    image = models.FileField(upload_to='documents/')


class itemform(ModelForm):
    class Meta:
        model = items
        fields = ['name','description','image']

我已将此添加到设置

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL   = '/media/'

3 个答案:

答案 0 :(得分:2)

就像丹尼尔罗斯曼所说的那样,你没有“如果形式是无效的”逻辑。 在RETURN语句之前删除TAB

def createitem(request):
if request.method == "POST":
    form= itemform(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return Redirect('/items')
else:    
    form = itemform()
return render(request, 'app/create.html', {'form':form})

答案 1 :(得分:0)

好的,这不是一个直接的答案,而是我用来调试这类问题的方式。

form = ...
import pdb; pdb.set_trace()
if form.is_valid():
  ...

运行服务器并尝试提交表单。提交后检查终端,调试器将保留导入pdb 然后使用

$ form.errors

另外,请不要使用分号。

答案 2 :(得分:0)

所以我只是将这些线添加到create.html

<form method="post" enctype="multipart/form-data">

你必须声明文件输入的enctype我想

https://stackoverflow.com/a/20394870/8925418 现在工作得很好