2011-04-21 6 views
3

사용자 모델을 확장하는 방법을 알려주는 예제가 많이 있지만 "사용자를 따라야 할 필요없이 기존 모델을 확장하는 방법에 대한 실제적이고 완전하며 문서화 된 예제를 찾을 수 없습니다. 프로필 패턴 "(그리고 솔직히 나는 왜 궁금해.)django : 기존 모델을 확장하는 방법

필자의 유스 케이스는 다음과 같습니다. django-lfs의 제품 모델을 확장해야합니다.

LFS에서

이 (lfs.catalog.admin에서) 다음과 같이 등록 :

from django.contrib import admin 

[...] 
from lfs.catalog.models import Product 
[...] 
class ProductAdmin(admin.ModelAdmin): 
    prepopulated_fields = {"slug": ("name",)} 
admin.site.register(Product, ProductAdmin) 
[...] 

난 내 (즉, 그것을 서브 클래스)를 등록하려고했지만 내가 가진 :

장고 /있는 contrib/관리/레지스터 에서 sites.py " 라인 (78), AlreadyRegistered 인상 (% 모델. 이름 '모델 % s이 (가) 이미 등록') 그래서

, 누군가가 제안 나는 그 물건을 등록 취소하고 내 물건을 등록해야한다. 내 사용자 정의 필드를 볼 수 아무데도,

from lfs.catalog.models import Product 
from lfs.catalog.admin import ProductAdmin 

admin.site.unregister(Product) 

from lfs_product_highlights.catalog.models import Product 

admin.site.register(Product,ProductAdmin) 

오류이 시간을하지만 아무런 변화가 없습니다 :

나는 이런 식으로하지 않았다.

힌트가 있습니까?

+0

모델 하위 클래스가 새 데이터베이스 필드를 추가합니까? 그렇지 않다면 프록시 모델을 살펴보십시오. http://lincolnloop.com/blog/2010/dec/16/using-proxy-models-customize-django-admin/ – arie

+0

예, 추가하기 위해이 작업을 수행하고 있습니다. fields – simahawk

+0

나는 django-schedule과 같은 문제에 직면 해있다. :/ –

답변

2

어려운 이유는 object-relational impedance mismatch (그 말을 좋아해요) 때문입니다. 객체와 클래스는 이 아니며은 관계형 데이터베이스에 완벽하게 매핑됩니다. Django가 가장자리를 부드럽게 만들려고하는 것과 같은 ORM이 있지만 차이가 너무 큰 부분이 있습니다. 상속은 다음 중 하나입니다. 하나의 테이블을 다른 테이블에서 "상속"하는 방법은 없으므로 외부 키 등을 통해 시뮬레이션해야합니다.

어쨌든 실제 문제는 무엇이 일어나는지 실제로 볼 수는 없지만 문제를 해결할 수있는 방법 중 하나는 ProductAdmin을 하위 클래스로 지정하고 서브 클래 싱 된 모델에 model 특성을 설정하는 것입니다.

+0

안녕하세요,이 http://pastebin.com/4reDRJKH 해봤지만 변경된 사항은 없습니다. – simahawk

관련 문제