Django表格没有必填字段
我想制作一个用于过滤搜索的表单,不需要任何字段.例如,给出此代码:
models.py: class Message(models.Model): happened = models.DateTimeField() filename = models.CharField(max_length=512,blank=True,null=True) message = models.TextField(blank=True,null=True) dest = models.CharField(max_length=512,null=True) fromhost = models.ForeignKey(Hosts,related_name='to hosts',null=True) TYPE_CHOICES = ( (u'Info',u'Info'),(u'Error',u'Error'),(u'File',u'File'),(u'BPS',u'BPS'),) type = models.CharField(max_length=7,choices=TYPE_CHOICES) job = models.ForeignKey(Jobs) views.py: WHEN_CHOICES = ( (u'',''),(1,u'Today'),(2,u'Two days'),(3,u'Three Days'),(7,u'Week'),(31,u'Month'),) class MessageSearch(ModelForm): #Class that makes a form from a model that can be customized by placing info above the class Meta message = forms.CharField(max_length=25,required=False) job = forms.CharField(max_length=25,required=False) happened = forms.CharField(max_length=14,widget=forms.Select(choices=WHEN_CHOICES),required=False) class Meta: model = Message 这就是我现在的代码.如您所见,它基于模型制作表单.我重新定义了表单中的消息,因为我正在使用icontains过滤器,所以我不需要一个巨大的文本框.我重新定义日期主要是因为我不想乱用日期(我讨厌使用日期!谁没有?)我改变了工作领域,因为否则我得到了现有工作的下拉列表,我真的希望能够用常用词搜索.所以我能够将所有这些标记为不需要 问题是它根据需要标记了我的所有其他字段,因为在模型中它们不允许为空. 现在在模型中它们不能是空白的.如果它们是空白的那么数据是坏的,我不希望它在数据库中.但是,表单只是页面上的过滤器表单以显示数据.我永远不会从那个表格中保存,所以我不在乎字段是否为空白.那么是否有一种简单的方法可以使所有字段成为required = false,同时仍然使用类:Meta:model =表单中的消息格式?我可以直接从模型制作表格,这非常方便. 这也是我对django应用程序的第一次认真尝试,所以如果有些荒谬的错误,请善待:) 解决方法
您可以创建适合您需求的自定义ModelForm.此自定义ModelForm将覆盖save方法并将所有字段设置为不需要:
from django.forms import ModelForm class SearchForm(ModelForm): def __init__(self,*args,**kwargs): super(SearchForm,self).__init__(*args,**kwargs) for key,field in self.fields.iteritems(): self.fields[key].required = False 所以你可以通过简单地调用而不是ModelForm来声明你的表单,例如: class MessageForm(SearchForm): class Meta: model = Message (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |