为什么Django.forms.CharField中缺少“blank”,而Django.db.models.CharField中却存在“blank”?

2024-04-20 14:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

背景

我有一个模型,其中两个字段设置为空白:

class News(models.Model):                                                                                                                                                                                           
    title = models.CharField(max_length = 50, blank = True)                                                                                                                                                         
    info = models.TextField(blank = True)

问题是,我想在生成表单时动态设置max_length,因此我有一个自定义表单:

class NewsForm(forms.ModelForm):                                                                                                                                                                                    
    def __init__(self, *args, **kwargs):                                                                                                                                                                            
        super(NewsForm, self).__init__(*args, **kwargs)                                                                                                                                                             

        title_max_length = 20                                                                                                                                                                                       
        info_max_length = 100                                                                                                                                                                                       

        self.fields["title"] = forms.CharField(max_length = title_max_length)                                                                                                                                       
        self.fields["info"] = forms.CharField(                                                                                                                                                                      
            widget = forms.Textarea,                                                                                                                                                                                
            validators = [                                                                                                                                                                                          
                MaxLengthValidator(info_max_length)                                                                                                                                                                 
            ]                                                                                                                                                                                                       
        )  

注意:这两个长度值实际上是从数据库中获取的,但我选择不包含该代码以使示例更短。

问题

当我使用这些自定义字段时,blank选项将被覆盖/忽略。

我试着在现有字段中添加最大长度、小部件和验证器,如下所示:

class NewsForm(forms.ModelForm):                                                                                                                                                                                    
    def __init__(self, *args, **kwargs):                                                                                                                                                                            
        super(NewsForm, self).__init__(*args, **kwargs)                                                                                                                                                             

        title_max_length = 20                                                                                                                                                                                       
        info_max_length = 100                                                                                                                                                                                       

        self.fields["title"].max_length = title_max_length                                                                                                                                                          
        self.fields["info"].widget = forms.Textarea                                                                                                                                                                 
        self.fields["info"].validators = [MaxLengthValidator(info_max_length)] 

执行此操作时,blank选项起作用,但动态最大长度不应用于窗体。

我试着查一下django的资料来源,但我是新来的,所以现在太多了。

我有办法做到这一点吗?


Tags: selfinfofieldstitleinitmodelsargsforms