2015-02-03 16 views
23

Bir Django projesi yapıyorum ve 127.0.0.1:8000/articles/create adresine erişmeye çalıştığımda aşağıdaki hatayı aldımRemovedInDjango18Warning: 'fields' niteliği veya 'exclude' özelliği olmadan ModelForm oluşturulmadan onaylanır

:

İşte
ValueError at /articles/create/ 

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

benim forms.py dosyasıdır: benim Ubuntu terminalde: my gerçek localhost sitesini ziyaret ederken

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

Buna ek olarak, ben de şu hata var Bu sorunun nasıl emin değilim

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) 

:

Ve işte benim views.py dosyasıdır. Django belgelerine baktım ama problemim için bir çözüm bulamadım, bu yüzden herhangi bir yardım takdir edilecektir. Formunuz için

+0

İlk mesaj bir hata değil, sadece bir uyarı. İkincisi için, görünüm kodunuzu göndermeniz gerekir: mesajın belirttiği gibi, bir yanıt nesnesini döndürmüyorsunuz. –

+0

GET isteklerini işlemiyorsunuz. Geri dönüşünüz, eğer request.POST: ' – Ngenator

+0

anlamıyorum. Ben request.POST ise dönüşümü iç koda baktım. Bir girinti hatası olabilir mi? – brown1001

cevap

77

, bu django 1.8'de, bunun yerine

dışlamak için alanları listelemek için

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 

Formunuzu değiştirmek Veya bir exclude eklemeniz gerekecektir belirten bir uyarı değil, bir hata var 1.8

görüşleriniz ile hata gelince https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#selecting-the-fields-to-use

ana kadar ihtiyaç duyulmadı

, iade o içeride f bir if bildirimi: if request.POST: bir istek isteği aldığında, hiçbir şey döndürülmez. Doğru if açıklamaya uygulayarak oluyor böylece

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) 

Sadece else blok dedent.

+0

Bu sorun düzeltildi, bu yüzden bunun için teşekkürler, ancak yine de makalelerde/oluşturmda ValueError'ım var. Ne yapacağımı bilemiyorum. – brown1001

+0

@ brown1001 view.py ifadenizi eklemelisiniz çünkü "HttpResponse" nesnesini döndürmediğinizden başka neyin yanlış olduğunu bilmenin bir yolu yoktur. – Ngenator

+0

Yukarıdaki gönderimimde yalnızca views.py eklemiştim. – brown1001

5

Sadece ihtiyaç ...

from django import forms 
from models import Article 

class ArticleForm(forms.ModelForm): 

    class Meta: 
     model = Article 
     exclude =() 

... Formunuzu düzeltmek için. Bununla ilgili nelerin olduğunu görmek için görüntüleme kodunuzu göndermeniz gerekir.

2

Sizin bakış açınıza göre, istek POST değilse, hiçbir şey döndürmezsiniz. else ifadesinden her şeyi bir girintiyi geri almalısınız. Eğer Ngenator önerdiği gibi fields = __all__ kullanın ve eğer

5

aşağıdaki koşullu gerekli olacak Django, çeşitli sürümleri altında çalışan gerekebilir bir proje olmadığını:

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

aksi takdirde hata django.core.exceptions.FieldError: Unknown field(s) (a, l, _) specified for CrispyTestModel olsun, olarak Burada görüldüğü: https://travis-ci.org/maraujop/django-crispy-forms/jobs/56996180

+1

[Django docs] 'a göre (https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#selecting-the-fields-to-use), olması gereken tüm alanları açıkça belirtmek istersiniz. "fields" özelliğini kullanarak formda düzenlenmiştir. Güvenlik kaygısı olmadıkça, '__all__' kullanılmasının çok daha az güvenli olduğu ve büyük web sitelerinde ciddi istismarlara yol açtığı bilinmektedir (örneğin [GitHub] (https://github.com/blog/1068-public-key-security -vulnerability-ve-azaltma)). – pebox11

İlgili konular