>

이 모델을 고려하자 :

class MyModel(models.Model):
    DEFAULT = 1
    NOT_DEFAULT = 2
    SOMETHING = 3
    SOMETHING_ELSE = 4
    CHOICES = (
        (DEFAULT, 'foo')
        (NOT_DEFAULT, 'bar')
        (SOMETHING, 'tar')
        (SOMETHING_ELSE, 'oof')
    )
    field1 = models.CharField(
        max_length=128,
    )
    field2 = models.SmallIntegerField(
        choices=CHOICES,
        default=DEFAULT
    )

이 데이터로 어떻게 채우나요?

name, status
'one', 'foo'
'two', 'oof'
'tree', 'foo'
'four', 'foo'
'five', 'tar'
'six', 'bar'

정수를 기대하기 때문에 작동하지 않습니다

MyModel.objects.create('one','foo')

어리석은 해결 방법없이 어떻게 제대로 작동합니까?

와 같은 매핑 빌드가 있습니까?

'foo' -> 1
'oof' -> 4

등.?


  • 답변 # 1

    당신은 튜플 튜플 CHOICES  두 번째 값으로 첫 번째 요소를 찾아야합니다. 따라서 튜플에서 dict를 생성하고 값을 얻을 수 있습니다 (예 :

    ).
    value = 'foo'
    {v: k for k, v in MyModel.CHOICES}.get(value)
    
    

  • 답변 # 2

    선택 사항을 정의 할 때 문서에 따라

    와이즈 비즈

    와이즈 비즈  정수를 기대합니다. 정수를 저장하고 그 값과 짝을 이루어 표시에 사용할 사람이 읽을 수있는 값을 결정합니다. 예를 들어 현재 설정에서

    The first element in each tuple is the actual value to be set on the model, and the second element is the human-readable name. For example:

    값   field2 에지도 .

    고려 :

    1
    
    

    foo 에 대한 데이터베이스에 저장된 값   m = MyModel.objects.create( field1 = 'MyText', field2 = 1 ) 입니다 , 그러나 m.field2 에 대한 양식 등에 사용되는 사람이 읽을 수있는 이름   1 입니다   m.field2 를 어떻게 정의했는지에 따라 .

  • 답변 # 3

    원하는 결과를 얻기 위해 모델을 수정할 수 있습니다.

    foo
    
    
    CHOICES

관련 자료

  • 이전 java - javaxmail을 사용하여 메일 본문에 인코딩 된 이미지 전송
  • 다음 angular2 routing - Angular CLI 'tsc'명령이 dist 폴더에 indexhtml, nodemodules, css 등을 복사하지 않습니다