ModelForm field 에서 empy_label 없애기

종욱·2020년 4월 7일
0

django

목록 보기
4/5

일반 ChoiceField 의 경우

모델폼을 렌더링하면 --- 와 같은 빈 선택옵션이 생긴다.

이 부분을 지우는 방법 2가지가 있다.

Teacher 라는 모델로 예를 들면,

1. 모델폼이 그려진 후 위젯에서 첫번째 요소를 제거

# 교사 생성 폼
class TeacherForm(forms.ModelForm):

    class Meta:
        model = Teacher
        fields = ['level', 'name']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['level'].widget.choices.pop(0)

2. 모델의 필드 값에 default 옵션 주기 (추천)

# 교사 모델
class Teacher(models.Model):    
    # ...
    REGURAL = 'A'
    TEMPORARY = 'B'
    LEVEL_CHOICES = (
        (REGURAL, '정규'),
        (TEMPORARY, '임시'),
    )
    level = models.CharField('등급', max_length=1,
    			choices=LEVEL_CHOICES,
            		default=REGURAL)

    class Meta:
        verbose_name = '교사'
        verbose_name_plural = '교사'

    def __str__(self):
        return self.name

모델 필드가 blank=False 일 때 가능


ForeignKey 등 릴레이션 모델이 들어가는 ModelChoiceField 의 경우

class SubjectCV(CreateView):
    
    # ...
    
    def get_form(self):
        form = super().get_form()
        form.fields['subject_category'].empty_label = None
        return form
    
    # ...

폼의 해당 필드의 empty_label 의 값을 None 으로 설정해준다.
(원래는 문자열 '---------' 이 들어있음)
그러면 selected 된 항목 없이 필드가 렌더링된다.


References

0개의 댓글