我一直收到错误
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
也许我的语法有问题,或者我错过了一个明显的基本错误。任何帮助将不胜感激,如果您需要更多信息/背景,请告诉我。谢谢!
答案 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__'
。
在Django 1.6中更改:
在版本1.6之前,'所有'快捷方式不存在,但省略fields属性具有相同的效果。省略两个字段和排除现在已弃用,但将继续像以前一样工作,直到版本1.8。