2011-02-16 3 views
2

외부 데이터 피드를 기반으로 한 드롭 다운 목록을 사용하여 간단한 ModelForm을 만드는 방법을 찾고 있습니다. 내가 원하는 이유는 django admin을 통해 외부 소스에서 데이터를 가져올 수 있기 때문입니다.비 데이터베이스 데이터 용 장고 쿼리 세트 만들기

이 예는 많은 필드가있는 class BlogPost(models.Model) 모델 일 수 있습니다. django admin의 "create new object"에서는 단 하나의 필드 여야합니다. 외부 블로그의 게시물 목록. 사용자가 드롭 다운 목록에서 게시물을 선택하고 객체를 저장하면 BlogPost은 피드의 모든 관련 데이터를 가져오고 BlogPost 인스턴스의 해당 필드를 설정하여 데이터베이스에 저장합니다.

나는 "외부 데이터를 가져 와서 장고 관리에 제시"하고 있습니다. 내가 칼을하는 가장 좋은 방법을 말하고, 여전히 django의 표준 구성 요소를 사용할 수있는 "비 - 데이터베이스, 사용자 정의 queryset"에 외부 피드를 포장하고 forms.ModelChoiceField에 전달하는 것입니다? 이 간단한 방법이 있습니까?

(I 실제로 블로그 게시물 도루를 작성 아니에요. 내가 만드는거야 사이트에서 완전히 분리 끝을 비디오 아카이브를 다시하고 난에서 데이터를 가져올 수있는 사용자 친화적 인 방법이 필요)

답변

2

ModelChoiceField은 특히 쿼리 세트 용입니다. 비 쿼 리셋을 사용하려는 경우 어떤 오브젝트 목록이라도 사용하는 ChoiceField을 사용하지 않으시겠습니까? http://docs.djangoproject.com/en/dev/ref/forms/fields/#choicefield

여기에 뭔가가 있습니까?

mychoices = forms.ChoiceField(choices=[('external_post', 'External Post'), ('external_post2', 'External Post 2')]) 

원하는 소스에서 자유롭게 목록을 채울 수 있습니다.

+0

폼이 렌더링 될 때마다 값이 평가되는 한 ChoiceField를 사용할 수 있고 ModelChoiceField는 사용할 수 없다고 생각합니다. ChoiseField (choices = foo())가 foo보다 한 번만 평가되고 ChoiseField (choice = foo)라는 함수 참조를 선택 항목으로 전달할 수 없다고 말하면됩니다. – Vegard

+0

그 해결책은 [여기] (http://ilian.i-n-i.org/django-forms-choicefield-with-dynamic-values/)입니다 :) – Vegard

+0

네, 동적 인 것들을 __init__로 대체하십시오. –

관련 문제