2012-05-22 3 views
1

나는이 (잘하면) 간단한 문제를 풀려고 노력하고 있습니다.Django-Nonrel의 OneToOneField 릴레이션에서 파생 클래스에 올바르게 액세스하기

저는 Django-nonrel을 사용하고 있으며 몇 가지 모델을 설정하려고합니다. 내가 Site의 인스턴스를 얻을 때

class Application(models.Model) 
    name = "Application" 

    def get_name(self): 
     print(self.name) 

class ExampleApp(Application) 
    name = "Example Application" 

class Site(models.Model) 
    app = models.OneToOneField(Application, null=True) 
    id = models.CharField(max_length=1) 
    # other details not important 

, 나는 (예 : ExampleApp)

class MyView(View): 
    def get(self, request, *args, **kwargs): 
     # Presuppose that I have an object with id="a" 
     site = Site.objects.filter(id="a") 

     #<Application: Application> 
     app = site.app 

     #returns "Application", not "Example Application" 
     app.get_name() 

가 어떻게 액세스 할 수있는 파생 클래스의 인스턴스를 얻기 싶습니다 : 나는 아래의 코드를 단순화했습니다 파생 클래스?

(이상적으로, 나는 추상 기본 클래스로 Application을 싶지만, 장고는 추상 기본 클래스에 관계가. 나는 Application 내부 필드를 정의 것이지만, 장고 nonrel을 멀티 테이블 상속을 지원하지 않습니다 허용하지 않습니다.)

답변

1

Furbeenator가 대답 한 내용은 정확하지만 내 (자기) 응답은 내 상황에있는 누군가에게 더 가치가있을 수 있다고 생각합니다.

Django-nonrel에는 몇 가지 멋진 앱이 포함되어 있습니다. 주목할만한 내용은 djangotoolbox입니다. djangotoolbox에 포함 된 필드는 EmbeddedModelField입니다. '컨테이너'모델에 모형의 사본을 블롭으로 저장하는 것으로 보입니다. 내 예에서

이에 거꾸로 내 상황에서, 그것도 내 Application 클래스 추상적를 만들 수 있다는 것을 의미한다는 것입니다

from djangotoolbox.fields import EmbeddedModelField 

class Site(models.Model) 
    app = EmbeddedModelField(null=True) 
    id = models.CharField(max_length=1) 
    # other details not important 

. 단점은 데이터가 중복되어 여전히 Application 인스턴스에서 Site 인스턴스에 액세스 할 수 없다는 것입니다 (그러나 제 경우에는 허용되는 절충이었습니다).

2

Django 플러그인을 추가하지 않아도 가능하지 않습니다. Find object in child class from object in parent class in django을 참조하십시오. lazerscience의 답변에이 기능에 액세스하려면 https://code.google.com/p/django-polymorphic-models/을 사용하는 것이 좋습니다.

+1

분명히 * 내가 좋아하는 것 같습니다. 장고 - 언렐에서이 작품이 작동하는지 여부에 대한 아이디어가 있습니까? – NT3RP

+0

나는 그것을 시도하지는 않았지만 djanog-nonrel (NoSQL을 사용한 구현 일 뿐이다)과 함께 작동 할 것이라고 상상해 보았다. NoSQL 지원과 관련이 없어야한다. – Furbeenator

+1

해결책은 현재 상황에 적용되지 않습니다. 다형성 모델은 관계를 나타낼 때 특별한 것을 수행하지 않는 것처럼 보입니다. 또한 기본 클래스를 PolymorphicMetaClass로 만들면 다운 캐스트하려고 할 때 오류가 발생합니다. '다중 테이블 상속은 비 관계형 DB에서 지원되지 않습니다 .' – NT3RP

관련 문제