Django:找不到字段?

时间:2015-10-16 15:18:22

标签: python django django-models django-forms

我一直收到错误

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 

也许我的语法有问题,或者我错过了一个明显的基本错误。任何帮助将不胜感激,如果您需要更多信息/背景,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:2)

  

我完全明白错误指出了什么,但我没有   明白为什么它首先出现了?

错误...因为您的ModelForm没有明确指定fields列表或exclude列表?

  

这是django要我更新的表单:   class DirectMessageAdmin(admin.ModelAdmin):

这不是ModelForm,这是ModelAdmin。鉴于您的错误消息中的网址,我认为它与您的管理员没有任何关系......

答案 1 :(得分:1)

Django documentation: Creating forms from models: Selecting the fields to use

中所述
  

强烈建议您使用fields属性显式设置应在表单中编辑的所有字段。当表单意外地允许用户设置某些字段时,特别是当新字段添加到模型时,如果不这样做很容易导致安全问题。根据表单的呈现方式,问题可能甚至在网页上都不可见。

     

另一种方法是自动包含所有字段,或仅将一些字段列入黑名单。众所周知,这种基本方法的安全性较低,并导致主要网站上的严重漏洞(例如GitHub)。

因此,无论模型中定义的字段是什么,都应在fields中明确包含Meta变量。这必须是模型的所有字段的元组,您需要在ModelForm中使用它。您也可以将值指定为'__all__'

这是introduced in Django 1.6

  

在Django 1.6中更改:

     

在版本1.6之前,'所有'快捷方式不存在,但省略fields属性具有相同的效果。省略两个字段和排除现在已弃用,但将继续像以前一样工作,直到版本1.8。