2011-04-20 3 views
2

나는 모델 상속을 처리 할 수 ​​있다고 생각하는 해결책이 있지만 지금은 실제로 다시 문제를 해결하지는 않습니다. 제가 원했던 것은 하나의 모델을 호출하고 나서 아이들 모델의 필드를 나에게 접근 가능하게하는 것입니다. 상속을 통해 나는 전체 목적을 상실한 명령 줄에 자식 모델 이름을 넣어야합니다. 여기에 내가 좋아하는 것이 무엇의 예는 다음과 같습니다Django 모델 상속 쿼리 중앙 테이블

module = LessonModule.objects.get(pk=20) 
module.render() 

을 그리고 그것은 해당 렌더링 기능을 실행 한 : 내가 할 수 있도록하고 싶습니다 무엇

class LessonModule(models.Model): 
    lesson = models.ForeignKey('Lesson') 
    name = models.CharField(max_length=100, blank=True) 


class ProfileImage(LessonModule): 
    file_loc = models.ImageField(upload_to="profiles/") 
    detail_file_loc = models.ImageField(upload_to="profiles/", blank=True) 

    def render(self): 
     t = loader.get_template("template/profile_image.html") 
     c = Context({'image_path': self.file_loc.url}) 
     return t.render(c) 

    def __unicode__(self): 
     return '[prof: %d]' % self.id 

class Note(LessonModule): 
    def __unicode__(self): 
     return '[note: %d]' % self.id 

    def render(self): 
     return self.id 

는 할 수 있습니다. 예를 들어, pk가 Note 모델과 정렬되면, self.id를 반환 할 것입니다. 물론 이것은 이러한 기능을 사용하여 수행하고자하는 작업으로 단순화되었습니다.

모델 상속을 사용할 필요가 없습니다. 이 작업을 수행하는 가장 좋은 방법으로 보였습니다. 중앙 영역에서 모든 가능한 모듈을 찾아야합니다.

또한 LessonModule의 레슨 외래 키에서 레슨에 할당 된 모든 LessonModule을 가져 오는 데에도이 방법을 사용합니다.

답변

2
나는 그것을 사용하지 않은,하지만 당신이 찾고있는 것처럼이 프로젝트 보인다

:
https://code.google.com/p/django-polymorphic-models/

하는 당신은 LessonModule.objects.all() 등을 요청할 수 있습니다 다음 .downcast() 각이 자동으로 객체 ProfileImage 또는 노트.

또는 항상 PolymorphicMetaclass를 LessonModule에 추가하여 쿼리 세트에서 항상 ProfileImage 및 Notes 객체를 검색하십시오.

Django 모델의 추가 질의 ... 다형성은 순수한 파이썬 코드가 아닌 테이블 조인을 통해 수행됩니다.

+0

마지막으로 답변 해 주셔서 감사합니다. 오랜만이야. 나는 그것을 조사해야 할 것이다. – Chris