2013-05-06 21 views
5

nền

Tôi có một mô hình với hai lĩnh vực được thiết lập vào chỗ trống:Tại sao "trống" bị thiếu trong django.forms.CharField, nhưng hiện diện trong django.db.models.CharField?

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

Cái này là tôi muốn thiết lập các max_length động khi biểu mẫu được xây dựng, vì vậy tôi có một hình thức tùy chỉnh :

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)                                         
      ]                                                  
     ) 

lưu ý: hai giá trị chiều dài thực sự lấy từ cơ sở dữ liệu, nhưng tôi quyết định không bao gồm mã để giữ ví dụ ngắn hơn.

Vấn đề

Khi tôi đang sử dụng những tùy chỉnh các lĩnh vực tùy chọn blank bị ghi đè/bỏ qua.

Tôi đã cố gắng chỉ thêm max_length, widget và xác nhận đến các lĩnh vực hiện có, như thế này:

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)] 

Khi làm điều này tùy chọn blank hoạt động, nhưng max_length động không được áp dụng cho các hình thức.

Tôi đã cố gắng tìm trong nguồn django, nhưng tôi khá mới nên nó quá nhiều để có ngay bây giờ.

Có cách nào để tôi có thể đạt được điều này không?

+2

Bạn đã thử thêm tham số bắt buộc = False vào biểu mẫu của mình chưa? –

+0

@AlagappanRamu: Không, tôi thì không. Tôi đã quá tập trung vào việc tìm kiếm "trống" mà tôi đã bỏ lỡ nó trong tài liệu. Tôi đã thêm 'required = False' vào quá trình tạo' CharField' và đã giải quyết được vấn đề. Viết bình luận của bạn như là một câu trả lời để tôi có thể chấp nhận nó và upvote nó. Cảm ơn bạn! – rzetterberg

+0

Đã thêm làm câu trả lời! Cảm ơn. –

Trả lời

12

Khi tạo mẫu của bạn, thêm tham số sau đây để CharField ngoài max_length, widget và xác nhận:

forms.CharField(...,required = False) 

Trong Django, trống = True trong các mô hình tương quan với yêu cầu = False trong hình thức.

+0

không hoạt động đối với tôi ở Django 1.11, vẫn yêu cầu quản trị viên django Hoạt động sau khi máy chủ khởi động lại (hmm, thường tự động tải lại) –

Các vấn đề liên quan