2014-01-25 2 views
1

나는 Log Entry을 나타내는 모델을 가지고 있습니다. 이것은 DB에 수정이있을 때마다 생성됩니다.Django의 한 필드에서 다른 모델 유형을 어떻게 참조합니까?

Log Entry에서 변경된 모델 개체를 참조하는 외래 키 필드를 포함하고 싶습니다.

그런 것이 가능합니까?

예를 들어

: 대신 사용자의 현재

Log Entry 1 

---> Modified Object Field = User Object 

그러나이

Log Entry 2 

---> Modified Object Field = Blog Object 
+0

가장 좋은 추측은 장고 관리자가 똑같이하는 방법을 찾는 것입니다. django admin에 로그인 할 때 로그를 확인했습니다. –

답변

2

GenericForeignKey에서 봐 (먼저 외래 키 콘텐츠 형식을 얻을 필요) :

정상적인 외래 키 수있는 전용 "포인트"다른 하나의 모델 [을 ... .] contenttypes 응용 프로그램 은 주위에서 작동하는 특수 필드 유형 (GenericForeignKey)을 제공하며 모든 모델과의 관계를 허용합니다.

0

나이젤 Tufnel이GenericForeignKey를 말한다하지만 난 당신이 Django's 코드 주위에 가지고가는 경우에 당신이 그것을 사용하고 있음을 알 수 있습니다, 당신은 Django's admin log 같은 뭔가를 찾고 생각대로 사용할 수 ContentType과 메시지에 ForeignKey :

class LogEntry(models.Model): 
    action_time = models.DateTimeField(_('action time'), auto_now=True) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    content_type = models.ForeignKey(ContentType, blank=True, null=True) 
    object_id = models.TextField(_('object id'), blank=True, null=True) 
    object_repr = models.CharField(_('object repr'), max_length=200) 
    action_flag = models.PositiveSmallIntegerField(_('action flag')) 
    change_message = models.TextField(_('change message'), blank=True) 
+0

그러나 그것이 일반 외국인이하는 것입니다. 실제 클래스는 콘텐츠 유형/객체 ID 필드 위에 약간의 설탕을 추가합니다. –

관련 문제