我正在做一个Django项目,当我试图访问127.0.0.1:8000/products/create时,我的Ubuntu终端出现以下错误:

/home/(my name)/django_test/article/forms.py:4: RemovedInDjango18Warning:  Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated - form ArticleForm needs updating
class ArticleForm(forms.ModelForm):

此外,在访问我的实际本地主机站点时,我还遇到了以下错误:

ValueError at /articles/create/

The view article.views.create didn't return an HttpResponse object. It returned None instead.

下面是我的forms.py文件:

from django import forms
from models import Article

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article 

下面是我的views.py文件:

from django.shortcuts import render_to_response
from article.models import Article
from django.http import HttpResponse
from forms import ArticleForm
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf

#import pdb; pdb.set_trace()
# Create your views here.

def articles(request):
    language = 'en-us'
    session_language = 'en-us'

    if 'lang' in request.COOKIES:
        language = request.COOKIES['lang']
    if 'lang' in request.session:
        session_language = request.session['lang']

    return render_to_response('articles.html',  
                          {'articles':
                           Article.objects.all(), 'language' : language, 
                           'session_language' : session_language})

def article(request, article_id=1):
    return render_to_response('article.html', {'article': 
                                            Article.objects.get(id=article_id) })

def language(request, language='en-us'):
    response = HttpResponse("setting language to %s" % 
                        language)

    response.set_cookie('lang', language)
    response.session['lang'] = language

    return response

def create(request):
    if request.POST:
        form = ArticleForm(request.POST)
        if form.is_valid():
            form.save()

            return HttpResponseRedirect('/articles/all')

        else:
            form = ArticleForm()

        args = {}
        args.update(csrf(request))

        args['form'] = form 

        return render_to_response('create_article.html', args)

我不确定如何解决这个问题.我看了Django文档,但我找不到解决问题的方法,所以任何帮助都将不胜感激.

推荐答案

对于您的表单,这是一个警告,而不是错误,告诉您在Django 1.8中,您需要将表单更改为

from django import forms
from models import Article

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article 
        fields = '__all__' # Or a list of the fields that you want to include in your form

或者添加一个exclude来列出要排除的字段

直到1.8才被要求

https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#selecting-the-fields-to-use

至于视图的错误,您的返回位于if语句中:if request.POST:,因此当它收到GET请求时,不会返回任何内容.

def create(request):
    if request.POST:
        form = ArticleForm(request.POST)
        if form.is_valid():
            form.save()

            return HttpResponseRedirect('/articles/all')

    else:
        form = ArticleForm()

    args = {}
    args.update(csrf(request))

    args['form'] = form 

    return render_to_response('create_article.html', args)

只需将else%的挡路go 掉,这样它就可以应用于正确的if语句.

Django相关问答推荐

Django BooleanField如何使用RadioSelect?

在Django管理中仅显示外键的特定值

Django OneToOneFieldto抽象对象

模仿没有像预期的那样工作(Django)

我如何告诉Django如何恢复自定义迁移?

APIView查询未返回任何结果

如何在Django中显示多个相关对象

如何保护单个数据库行/模型实例?

Django `UniqueConstraint` 异常处理方式与 'unique=True' 相同

Django中的多对多关系?

django 用一个提交按钮提交两种不同的表单

在 Bootstrap 中使单击的选项卡处于活动状态

Django判断字段是否为空?

TestCase 类中的 setUpClass、setUpTestData 和 setUp 有什么区别?

django excel xlwt

测试 Django 信号的正确方法

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

在 Mac OS X 上安装支持 JPEG 的 PIL

在 PyPy 下运行 Django 的缺点?

如何在 Django 中使用动态外键?