RemovedInDjango18Warning: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated
django, python
Solution
For your form, it's 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 an `exclude` to list fields to exclude instead
Which wasn't required up till 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 of an `if` statement: `if request.POST:` so when it receives a get request, 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 dedent the `else` block so that it's applying to the correct `if` statement.
Problem
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 got 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'm not sure how to fix this problem. I looked at the Django documentation but I couldn't find a solution to my problem so any help would be appreciated.