2012-04-10 5 views
1

관리자가 제 3 자 서비스에서 데이터를 가져 오길 원합니다. 이를 위해 관리자 패널에서 가져올 수있는 모든 항목을 나열하고 관리자가 가져올 항목을 선택할 수 있도록하고 싶습니다. 거기에는 심지어 데이터베이스없고 문서로부터 명확하지가 가능 단지의 경우django에서 사용자 정의 데이터 소스를 만드는 방법은 무엇입니까?

class Movie(models.Model): 
    title = #... 
    length = #... 
    #... 

class ImportManager(models.Manager): 
    def all(self): 
     # what should go here? 

class MovieImporter(Movie): 
    objects = ImportManager() 

    class Meta: 
     proxy = True 
     verbose_name_plural = verbose_name = 'Import Movies' 

admin.site.register(Movie) 
admin.site.register(ImportMovie) 

을 내가 ImportManager.all에서 검색어 세트를 반환 할 수있는 방법에 대한 혼란 스러워요 :
여기 내가 할 노력하고있어입니다 QuerySet에 객체 목록을 전달합니다. 어떤 아이디어?

+1

내 원하는 요약 : 새 모델 클래스는 외부 (아마도 읽기 전용) "백본"으로 구현됩니다. 나는 또한 당신이 메인 데이터베이스에 영화를 가져 오기를 원한다고 생각하니? 'Movie' 클래스에서 별도의 ImportManager를 갖는 것이 나에게 당신이 원하는 것, 즉 Movie.import_objects 또는 비슷한 것 같습니다. –

+0

@ChrisMorgan, 네, 이것이 제가하고 싶은 것입니다. 그러나'Movie'에서'ImportManager'를 사용하면 관리자 패널에 수입품 목록을 별도로 표시 할 수 없습니다. 문제는 가져 오기 자체가 아니라 관리자에게 가능한 가져 오기를 표시하는 데 있습니다. – Andrew

답변

3

django-nonrel을 사용하여 사용자 지정 DB 백엔드를 작성하거나 반환하는 관리자 같은 개체를 만들지 않는 한 기본 제공 관리자가 외부 SQL이 아닌 "데이터베이스"로 작업하는 것이 어려울 수 있습니다 관리자가 사용하고자하는 모든 방법을 구현합니다 like okm suggests).

해킹 할 수는 있지만 수입을 위해 adding a custom view을 보냈을 때 시간이 더 걸릴 것입니다. 관리자 템플릿을 상속 받아 나머지 관리 사이트와 매우 유사하게 만들 수 있습니다.

+0

감사합니다. 사용자 정의보기를 작성하는 것이 훨씬 더 간단합니다. – Andrew

0

관리자가 자신의 관리자 인 것처럼 보입니다. 매니저의 방법에서해야 할 일은 데이터베이스에 대한 몇 가지 특별한 질문입니다.

https://docs.djangoproject.com/en/dev/topics/db/managers/

는 여기에서 사용자 지정 관리자에 대한 몇 가지 방법을 만들 수있는 방법에 대한 몇 가지 예제를 가지고있다. 도움이 되길 바랍니다.

+0

감사합니다. 실제로 관리자는 "데이터베이스"가 없기 때문에 관리자에게 문서를 읽었습니다. 전혀 도움이되지 않습니다. 타사 서비스를 사용하여 가능한 가져 오기 목록을 검색합니다. – Andrew

+0

네, 데이터베이스가 있습니다. 이 https://docs.djangoproject.com/en/dev/topics/db/managers/#adding-extra-manager-methods에서 with_counts 메소드는 사용자 정의 쿼리를 사용하여 데이터베이스 정보를 검색합니다. 나는 당신을 이해하지 못한다고 생각합니다. – nicowernli

1

당신은

qs = Movie.objects.get_queryset() 
qs._result_cache = map(lambda x: Movie(*x), 
    [(1, 'The Godfather', '175'), ...]) 

에 의해 평가 된 검색어 세트를 조롱하고이를 관리자 변경 목록에 표시 할 수있다. 그러나 QuerySet 메서드를 해킹하고 여분의 실제 DB 쿼리를 방지하기 위해 필터와 같은 관리 작업을 비활성화해야합니다.

간단히하기 위해 데이터를 로컬 DB에 동기화하고 "admin picked"와 같은 값이있는 추가 상태 필드와 함께 저장하는 것이 가장 좋은 이유는 무엇입니까?
다른 테이블에 데이터를 넣고 선택한 테이블을 동영상 테이블과 동기화 할 수 있습니다.

또 다른 직접적인 방법은 변경 목록 또는 사용자 정의 된보기에서 영화 범주 및 기타 가능한 메타 상태로 직원을 픽업/필터링하고 나중에 셀러리 작업에서 영화 정보의 동기화를 수행하는 것입니다.

관련 문제