2015-10-16 84 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