当前位置: 首页 > 面试题库 >

RemovedInDjango18警告:不建议使用不具有“字段”属性或“排除”属性的ModelForm

尚阳炎
2023-03-14
问题内容

我正在做一个Django项目,当我尝试访问127.0.0.1:8000/articles/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/zh-CN/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块凹陷,即可将其应用于正确的if语句。



 类似资料:
  • 我使用QAF和ant作为构建脚本,IVY作为依赖管理工具。为了自动安装ivy,构建脚本有以下ant目标: 有一些 build.属性,其中属性 提供下载常春藤 ON 或 OFF 通过提供相应的值或。 现在的问题是,无论我为提供什么值build.properties它都认为

  • 问题内容: 由于classNames的分配方式不同,我在Material-UI组件中的客户端和服务器端样式渲染之间存在差异。 第一次加载页面时会正确分配className,但是刷新页面后,className将不再匹配,因此组件将失去其样式。这是我在控制台上收到的错误消息: 警告:道具不匹配。服务器:“ MuiFormControl-root-3 MuiFormControl- marginNorm

  • 问题内容: 我正在将Hibernate hbm.xml文件中的某些类迁移到JPA批注。 我们有一个在多个地方使用的可嵌入类。每个位置使用地址中属性的不同子集。 (为简便起见,省略了getter / setter) 请注意,在这个人为的示例中,shippingAddress使用Address.country,但billingAddress不使用;他们都不使用Address.email。 问题在于,H

  • 问题内容: 我正在将Hibernate hbm.xml文件中的某些类迁移到JPA批注。 我们有一个在多个地方使用的可嵌入类。每个位置使用地址中属性的不同子集。 (为简便起见,省略了getter / setter) 请注意,在这个人为的示例中,shippingAddress使用Address.country,但billingAddress不使用;他们都不使用Address.email。 问题在于,H

  • 我正在尝试从一个Boostrap模式中的表单发布。 这是我的表格: 致: 给我“bean名称'university'的BindingResult或plain target object都不作为请求属性可用”错误。

  • 我有个问题。您知道如何在不同的通用属性实现中使用相同的字段吗。 我有一个modelMapper接口,用于概括将要映射的对象类型 我还实现了此接口: 问题是,我需要在我的类中为每个映射设置一个字段,我认为这不是一个好的做法,我正在搜索是否有一种方法可以为所有类型的映射仅设置一个通用字段 有没有办法做到这一点?谢谢你们的帮助。