RemovedInDjango18 Warning: creating ModelForm without the "fields" attribute or the "exclude" attribute is deprecated

I am doing a Django project, and when I tried to access 127.0.0.1:8000/articles/create, I got the following error in my Ubuntu terminal:

/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): 

In addition, I also received the following error when visiting my actual localhost site:

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

Here is my forms.py file:

 from django import forms from models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article 

And here is my views.py file:

 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) 

I am not sure how to fix this problem. I looked through the Django documentation, but could not find a solution to my problem, so any help would be appreciated.

+23
python django
Feb 03 '15 at 18:36
source share
4 answers

For your form, this is a warning, not an error, telling you that in django 1.8 you will need to change your form to

 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 

Or add exclude to the list of fields to exclude instead

What was not required before 1.8

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

As for the error with your views, your return is inside the if : if request.POST: , so when it receives a request for receipt, nothing is returned.

 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) 

Just select the else block to apply it to the correct if .

+76
03 Feb '15 at 18:40
source share

You just need to ...

 from django import forms from models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article exclude = () 

... fix your form. You will need to publish your view code to find out what is wrong with it.

+5
Feb 03 '15 at 18:40
source share

if you use fields = __all__ as suggested by Ngenator, and if it is a project that can run on different versions of Django, the following condition will be required:

 if django.VERSION >= (1, 6): fields = '__all__' # eliminate RemovedInDjango18Warning 

otherwise you will get the django.core.exceptions.FieldError: Unknown field(s) (a, l, _) specified for CrispyTestModel , as shown here: https://travis-ci.org/maraujop/django-crispy- forms / jobs / 56996180

+5
Apr 03 '15 at 21:16
source share

In your opinion, you are not returning anything if the request is not POST. You must move all of the else back one space.

+2
Feb 03 '15 at 18:55
source share



All Articles