나는 장고에 여러 개의 "모듈"(각각 장고 앱)이있는 간단한 CMS를 만들고 있습니다. 내가 FooPage의 서브 클래스를 만들고, 각 모듈에서Django 상속 및 퍼미크트
class FooObject(models.Model):
id = models.SlugField(primary_key=True)
name = models.CharField(max_length=255)
creator = models.ForeignKey(auth.models.User, editable=False, related_name="createdby")
class FooPage(FooObject):
content = models.TextField(blank=True, null=True)
@models.permalink
def get_absolute_url(self):
return ('page',(), {'page_id':self.id}
class FooSubitem(FooObject):
parent = models.ForeignKey(FooPage, related_name='subitems')
및 FooSubitem, 예를 들어, 적어도 하나 개의 서브 클래스 : 나는 다음과 같은 모델을 설정 한
# in FooBlog.models
class FooBlog(FooPage):
owner = models.ForeignKey(auth.models.User, editable=False)
@models.permalink
def get_absolute_url(self):
return ('blog',(), {'blog_id':self.id})
class FooPost(FooSubitem):
post_time = models.DateTimeField(auto_now_add=True)
및
# in FooGallery.models
class FooGallery(FooPage):
location = models.CharField(max_length=255)
@models.permalink
def get_absolute_url(self):
return ('gallery',(), {'gallery_id':self.id})
class FooImage(FooSubitem):
image_file = models.ImageField(upload_to='foogallery')
이
은 단순화,하지만 당신에게 내가 할 노력하고있어 좋은 아이디어를 줄 것이다. FooPost 및 FooImage 관리자는 상위 선택 목록을 해당 상위 페이지로 제한합니다.템플릿에서 사용하려고하면 문제가 발생합니다. 모두 FooBlog 및 FooGallery 유형의 모든 FooPages의 목록을 반환
page_list = FooPage.objects.all()
: 각각의 관점에서, 나는 다음 있습니다. 그러나, 나는이 목록을 반복 할 때 :
{% for page in page_list %}{{ page.get_absolute_url }}{% endfor %}
는 '페이지'URL 패턴을 반환하지 않는 '블로그'또는 '갤러리'URL 패턴을.
나중에 FooCalendar 모듈을 추가 할 때 코드를 다시 작성하지 않고이 작업을 수행하려면 어떻게해야합니까? 가능한 모든 모듈과 함께 작동하는지 확인하고 싶습니다.
감사합니다,
- Lexo 유형
FooPage
의 모든 개체
그것이 URL을 반환하는 서브 클래스 기능을 사용하지 않는 이상한 (그것은 반환을 수행하면 검색어 세트에
.select_subclasses
를 호출하는 경우그런 다음, 그것은 예를 들어, 모든 개체를 다운 캐스트합니다 FooBlog와 FooGallery를 목록에 넣으십시오.) 아마'FooBlog'와'FooGallery' 클래스를 프록시 모델로 설정해야 할 수도 있습니다.프록시 모델은 모델에 대해 동일한 데이터베이스를 유지할 때 사용되지만 순서와 같은 것들을 조정하고, 아마도'get_absolute_url' 기능을 사용하려고합니다. 체크 아웃하십시오 : http://docs.djangoproject.com/ko/1.2/topics/db/models/#id8 - 그게 효과가 있는지 알려주십시오. – Bartek
정보 주셔서 감사합니다. 프록시 모델을 살펴 보겠습니다. – Lexo
프록시 모델이 필요하다고 생각하지 않습니다. FooImage와 같은 개별 하위 클래스에는 추가 필드가 있어야합니다. 추상 클래스는 완벽하지만 FooPages와 FooSubitems 사이에 부모/자식 관계가 있어야하며 추상 클래스에 외래 키를 지정할 수 없습니다. – Lexo