2010-01-20 6 views
1

나는 (유래의 장고 클론) cnprog을 공부하고이 코드를 건너 온 한 :이 코드를 설명 할 수 있습니까?

class Comment(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    object_id  = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 
    user   = models.ForeignKey(User, related_name='comments') 
    comment  = models.CharField(max_length=300) 
    added_at  = models.DateTimeField(default=datetime.datetime.now) 

그래서 내 질문에 "? 때 일반 관계를 사용하는 것을 content_object의 사용은 그리고"입니다

감사

답변

2

최근 장고의이 멋진 기능 우연히 및 the docs 페이지를 읽는 것은 모든 분명히했다.

좀 더 확장하려면 일반 관계는 모델이 둘 이상의 다른 모델과 연결될 수있게하려는 경우입니다. 위의 예제에서 GenericKey를 사용하고 있기 때문에 Comment는 여러 모델 (예 : 질문 또는 답변 등)에 속할 수 있습니다.

특정 사용 샘플에서는 AddressProfile 모델을 사용하고 사용자 모델 및 회사 모델은 AddressProfile을 가질 수 있습니다. 처음에는 간단히 AddressProfile에 두 개의 ForeignKeys가 null = True로 설정되었으므로 어느 것이 든 관계를 지정할 수 있었지만 GenericKey 기능으로 훨씬 깨끗하게 만들 수있었습니다.

+0

감사합니다. 나는 http://www.djangoproject.com/documentation/models/generic_relations/#sample-usage를보고 있었지만 많은 것을 얻을 수 있었다. –

+2

장고 문서에는 검색 기능이 있습니다. – dannyroa

+0

일반 관계를 사용하면 데이터베이스를 쿼리 할 때 데이터베이스가 엄청난 피해를 입을 수 있습니다. 가능하면 개체 ID를 직접 확인하십시오. –

관련 문제