2015-01-17 3 views
1

maxlength가 300 인 태그 CharField이 있지만 기본 입력에는 100 문자를 예약해야하지만 사용자가 입력을 통해 나머지 200 문자를 설정할 수있게하고 싶습니다. 텍스트 상자. 내 공장은 모델에서 charfield의 maxlength를 300으로 설정하고, 양식에서 사용자 입력을 200 자로 제한하는 입력을 위젯으로 만듭니다.Django는 위젯을 사용하여 ModelForm 속성을 덮어 씁니다.

그러나 필자는 테스트를 한 결과 입력 필드의 최대 길이를 charfield 자체의 최대 길이에서 변경할 수 없음을 확인했습니다. 아무도 이것을 어떻게 알아?

models.py

class Video(models.Model): 
    title = models.CharField(max_length=50) 
    tags = models.CharField(max_length=200) 

form.py

class VideoForm(forms.ModelForm): 

class Meta: 
    model=Video 
    fields=['title','description','authorId','tags','video','thumbnail'] 
    #a widget is django's representation of an html input element 
    widgets = { 
     'tags': forms.Textarea(attrs={'cols': 80, 'rows': 20,'maxlength':5}), 
    } 

위의 코드의 결과 HTML 텍스트 영역 <textarea cols="80" id="id_tags" maxlength="200" name="tags" rows="20"></textarea>이지만, 대신에 나는 maxlength 5.

되고 싶어요

답변

5

VideoForm의 생성자를 덮어 씁니다.

class VideoForm(forms.ModelForm): 
    ... 
    def __init__(self, *args, **kwargs): 
     super(VideoForm, self).__init__(*args, **kwargs) 
     self.fields['tags'].widget.attrs['maxlength'] = 5 
+0

답장을 보내 주셔서 감사합니다. 답변으로 선택했는데 CharField를 Textfield로 만들면 실제로 문제를 해결 한 이후로 직접 ​​테스트하지 않았습니다 (매우 덜 우아하고 효율적인 방식으로). 그래서 maxlength를 명시 할 필요가 없었습니다) 그리고 위젯을 사용하여 최대 길이를 설정했습니다. – Oblivionkey3

관련 문제