2012-03-21 2 views
0

django에서 인라인 형식이 아닌 formset 수준에서 ChoiceField를 사용할 수 있습니까? 예를 들어 전화기에 대한 formset이 있고 각각의 인라인 양식이 단일 Phone 모델을 나타내는 경우, 어떻게 모든 인라인 양식에 걸쳐있는 ChoiceField를 가질 수 있습니까?Django - ChoiceField 여러 양식에 걸쳐

Complex ChoiceField

내 모델 : 나는 기본 전화 선택하고있어 어디 이런 식으로 뭔가

class Profile(models.Model): 
    verified = models.BooleanField(default=False) 
    primary_phone = models.OneToOneField('Phone', related_name='is_primary', null=True, blank=True) 

class Phone(models.Model): 
    profile = models.ForeignKey(Profile, editable=False) 
    type = models.CharField(choices=PHONE_TYPES, max_length=16) 
    number = models.CharField(max_length=32) 

    @property 
    def is_primary(self): 
     return profile.primary_phone == self 

난 항상 primary_phone을 제거하고 기본 또는 아니라면 나타 내기 위해 Phone에 BooleanField을 사용할 수 있습니다, 그러나 이것이 내 문제를 해결할 수 있을지 확실하지 않습니다.

나는 가능한 한 덜 해킹 된 더 장고 같은 접근법을 찾고 있습니다.

답변

1

Django에서 자동으로 생성하는 방법은 없습니다. 귀하의 ModelForm (인라인에서 사용)에서 부울 필드 is_primary를 추가합니다. 이 필드는 각 인라인 된 Phone 인스턴스에 표시됩니다 (확인란).

프런트 엔드에서 사용자가 한 번에 하나의 기본값 만 선택할 수 있도록 자바 스크립트로 정렬합니다. 백엔드에서는 몇 가지 사용자 정의 유효성 검사를 사용하여 단 하나의 is_default가 제출되었는지 다시 확인한 다음 필요에 따라 양식 논리로 primary_phone을 업데이트합니다.

+0

나는이 접근법을 이전에 사용하라고 들었지만, 여전히 그 중 하나의 측면을 얻지는 못한다. 왜 라디오 버튼 대신 자바 스크립트로 체크 박스를 사용하고 싶습니까? 나는 동일한 수동 작업을 할 수 있지만 라디오 버튼과 자바 스크립트를 사용할 수 없다는 뜻입니다. 체크 박스를 선호하는 특별한 이유가 있습니까? – abstractpaper

+0

글쎄, 부울 필드는 기본적으로 체크 박스를 생성 할 것이고, 장고가 여러 모델에 걸쳐있는 라디오 버튼 그룹을 생성하는 방법을 생각할 수는 없습니다. 장고는 각각의 이름 앞에 접두사를 붙일 것이기 때문에 가능한 일은 거의 없을 것 같아요. Peronally 나는 체크 박스를 사용하고 자바 스크립트를 사용하여 라디오 버튼과 같은 역할을하는 데 아무런 문제가 없습니다. – John

관련 문제