2012-08-13 2 views
2

두 모델이있는 ModelForm을 사용하여 테스트 폼을 만들고 있습니다. 양식에서 외래 키, 특히 선택 항목이있는 필드를 사용하여 다른 모델의 필드를 표시하는 방법?

  1. Country
  2. Email

나는 Email 모델을 기반으로 양식을 만드는 오전. Country 모델의 이름 필드에는 COUNTRIES 목록에 지정된 값이 있습니다. COUNTRIES 값과 함께 EmailForm에 이름 필드를 표시하고 싶습니다. 외래 키를 사용해야합니까? 안내해주십시오.

내 모델은 다음과 같이 :

COUNTRIES = (('IND', 'India'), ('PAK', 'Pakistan'), ('AMR', 'America')) 

class Country(models.Model): 
    name = models.CharField(max_length=3, choices=COUNTRIES) 

class Email(models.Model): 
    title = models.CharField(max_length=50) 
    country = models.ForeignKey('Country') 
    sender = models.EmailField(max_length=20) 
    date = models.DateTimeField() 
    text = models.CharField(max_length=20) 

class EmailForm(ModelForm): 
    class Meta: 
     model = Email 

나는이 밖으로 양식을 생성합니다. 그것은 비어있는 드롭 다운 메뉴를 보여줍니다. 목록에서 가치를 얻는 방법?

+0

중복 가능 어떻게 장고의 ModelForm에 외래 키 필드를 추가합니까? - 스택 오버플로 -> http://stackoverflow.com/questions/5708650/how-do-i-add-a-foreign-key-field-to-a-modelform-in-django 그리고이 같은 코드를 추가 질문에 너무 – Efazati

답변

4
당신은 아마 당신의 ModelForm에 사용자 정의 필드를 추가하고 원래의 외래 키 제외 할

: 회사를

class EmailForm(forms.ModelForm): 
    country_name = forms.CharField() 

    class Meta: 
     model = YourModel 
     exclude = ('country',) 

그런 다음보기에 당신은 수동으로 실시 만들어야을 (또는 존재하는 경우 취득) 및 양식을 저장 :

def foo(request): 
    if request.method == 'POST': 
     form = EmailForm(request.POST) 
     if form.is_valid(): 
      form.instance.country = Country.objects.get_or_create(cname=form.cleaned_data['country_name']) 
      form.save() 
+0

질문에 코드를 추가했습니다. – escapee

+0

재생 해 주셔서 감사합니다. 나는이 코드를 시도했다. 그것은리스트를 드롭 다운하지만 clist의 실제 값은 제공하지 않습니다. 모든 값은 'Country Object'로 바뀝니다. – escapee

+0

잘못하고 있습니다. 이 예에서는 {{form.country}}이 (가) {{form.country}}가 아닙니다. –

관련 문제