2012-01-25 2 views
3

Django가 모델에서 verbose_name의 자동 대문자 사용을 방지하는 방법은 무엇입니까? 예컨대 :django에서 verbose_name의 자동 대문자 사용을 중지하는 방법

class TestModel(models.Model): 
    enb_id = models.IntegerField(null=True, verbose_name="eNB ID", blank=True) 

내가 대문자 나 자신을 처리 어디서나 사이트에 "eNB에 ID"대신 "ENB ID"를 표시합니다. 메타 클래스 작품

from django.db import models 
class UpcappedModelField(models.Field): 

    def formfield(self, form_class=forms.CharField, **kwargs): 
     return super(UpcappedModelField, self).formfield(form_class=forms.CharField, 
         label=self.verbose_name, **kwargs) 

답변

7

것 같다. 대문자 (capfirst)를 수행하는 함수는 첫 번째 문자 만 변경합니다. 공백 문자이면 아무 것도 변경되지 않습니다. 웹 브라우저는 연속 된 공백을 무시하기 때문에 모든 것이 올바르게 표시됩니다.

class TestModel(models.Model): 
    enb_id = models.IntegerField(null=True, verbose_name=" eNB ID", blank=True) 

    class Meta: 
     verbose_name = " test model" 
+0

이것은 Meta 서브 클래스에서 Model의 verbose_name에도 적용됩니다. –

+0

제로 - 비 분리 공간 작동을 사용합니까? – minmaxavg

6

Django capitalizes the first letter when setting the form field for that model field 보인다 나를 위해.

from django.db import models 

class Artist(models.Model): 
    name = models.CharField("Artist", max_length=255, unique=True) 

    class Meta: 
     verbose_name = "Artist" 
     verbose_name_plural = "aRTiStS" 

결과,이에 대한 간단한 해결 방법은 verbose_name의 시작 부분에 공백을 추가하는 것처럼 enter image description here

+0

너무 많은 노력과 같이 모든 모델 필드를 재정의하십시오. –

+1

@danihp 모델 필드'__init__'는'label'을 허용하지 않습니다. 왜냐하면 label은 Form 필드 개념이기 때문입니다. Form 필드의 생성자 –

+3

+1에 전달되므로 'formfield'정의에 있습니다. 이것은 사용자의 깊은 지식을 나타내는 대답이지만, 아무도 투표하지 않습니다. – danihp

0

추가 verbose_name :

... 
defaults = { 
    'required': not self.blank, 
    'label': capfirst(self.verbose_name), 
    'help_text': self.help_text 
} 

당신은 (kwarg로 라벨을 전달하여)을 capfirst을 덮어 사용자 정의 모델 필드를 만들 수 있습니다

+0

그건 모델의 이름이지 필드 이름이 아니야 –

+0

oic. 수정을위한 감사합니다 –

관련 문제