2015-10-16 26 views
2

我不斷收到一個錯誤Django:未找到字段?

ImproperlyConfigured at /messages/compose/ 
Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form ComposeForm needs updating. 

我完全理解了該錯誤指出,但是我不明白爲什麼它顯示在第一位呢?

這是形式的Django要我更新:

from django import forms 
from .models import DirectMessage 

class ComposeForm(forms.ModelForm): 
    class Meta: 
     model = DirectMessage 

,這裏是我的模型(完整的字段):

from django.db import models 
from django.contrib.auth.models import User 

# Create your models here. 
user_obj = User.objects.get(username = 'jess') 

class DirectMessage(models.Model): 
    subject = models.CharField(max_length =150) 
    body = models.CharField(max_length =3000) 
    sender = models.ForeignKey(User, related_name='sent_direct_messages', null=True, blank=True) 
    receiver = models.ForeignKey(User, related_name='recieved_direct_messages', null=True, blank=True) 
    sent = models.DateTimeField(auto_now_add=False, auto_now=False, null=True, blank=True) 
    read = models.DateTimeField(auto_now_add=False, auto_now=False, null=True, blank=True) 

    def __unicode__(self): 
     return self.subject 

也許有一個與我的語法有問題還是我米錯過了一個明顯的根本性錯誤。任何幫助將不勝感激,讓我知道如果你需要任何更多的信息/背景。謝謝!

回答

1

因爲它在Django documentation: Creating forms from models: Selecting the fields to use描述:

強烈建議您明確設置應在形式使用的字段屬性進行編輯的所有字段。如果一個表單意外地允許用戶設置某些字段,尤其是在將新字段添加到模型中時,不這樣做很容易導致安全問題。根據表單呈現方式的不同,問題可能甚至不會在網頁上顯示。

另一種方法是自動包含所有字段,或僅包含一些黑名單。據瞭解,這種基本方法不太安全,並導致主要網站上的嚴重漏洞攻擊(例如GitHub)。

因此,無論模型中定義的字段如何,您都應該在Meta中明確包含fields變量。這必須是您需要在ModelForm中具有的模型的所有字段的元組。您也可以將值指定爲'__all__'

這已經introduced in Django 1.6

在Django 1.6更改:

1.6版本之前, '全部' 快捷方式不存在,但省略字段屬性有同樣的效果。忽略這兩個字段並排除現在已被棄用,但會像以前一樣繼續工作,直到版本1.8。

2

我完全理解了該錯誤指出,但是我不 明白爲什麼它顯示在第一位呢?

嗯...因爲你的ModelForm不明確地規定了無論是fields列表或exclude列表?

這是形式的Django要我更新: 類DirectMessageAdmin(admin.ModelAdmin):

這不是一個的ModelForm,這是一個的ModelAdmin。鑑於您的錯誤消息中的網址,我不認爲這與您的管理員有任何關係......

+1

ahhh,看起來像在我的壓力狀態我誤解了錯誤。讓我用我的表單更新這個問題 – Jesssssss