2010-06-14 5 views
0

내가 좋아하는 여러 테이블에 대한 쿼리가있는 경우에서 검색어 세트에 가입 투표 등). 어쨌든, 나는이 모든 결과에 하나의 쿼리 세트로 참여하고 싶습니다. 가능합니까? 당신이 일반적인 작업을하는 다른 개체가 필요 것 같다장고는 여러 테이블

+0

왜 이것을 원한다고 말할 수 있습니까? 우리는 대체 솔루션을 제공 할 수 있습니다 ... – sebpiq

+0

왜냐하면 : 1.i는 알림 목록을 가지고 있으며, 사용자가 동일한 순서로 이벤트가 발생했음을 나타내는 '새로운 알림'을 모두 표시하려고합니다. 먼저 답장, 투표 등). 또한, 나는이 모든 알림을 며칠 씩 주문하고 싶습니다. (그리고 모든 질문에 대해서만 가능합니다.) 및 2. 두 번째 이유 - 나는 UserProfile의 '이름 필드'에 queryset이있는 다른 곳에서 검색 기능을 가지고 있으며 사용자 테이블에 '사용자 이름'에 대한 qset을 추가하여 검색 할 수 있습니다. 둘 다. 고마워요! – dana

+1

Sébastien Piquemal과 같은 모델의 아키텍처를 변경하고 싶지 않다면 모든 오브젝트를 목록에 넣고 정렬 할 수 있지만 쿼리 세트에서는 사용할 수 없습니다. –

답변

1

의 문제라고 생각합니다 : 장고 실제로 일부 내장 기능이 당신 수 이것에 대한 "남용"; 이미 사용자의 행동을 기록하고 일반적인 외래 키 관계를 통해 객체를 참조하는 모델이있는 관리자를 위해, 내가 생각하는 당신은 하위 클래스 모델 수 및 당신의 목적으로 사용 :

from django.contrib.admin.models import LogEntry, ADDITION 
from django.utils.encoding import force_unicode 
from django.contrib.contenttypes.models import ContentType 

class MyLog(LogEntry): 
    class Meta(LogEntry.Meta): 
     db_table_name = 'my_log_table' #use another name here 

def log_addition(request, object): 
    LogEntry.objects.log_action(
     user_id   = request.user.pk, 
     content_type_id = ContentType.objects.get_for_model(object).pk, 
     object_id  = object.pk, 
     object_repr  = force_unicode(object), 
     action_flag  = ADDITION 
    ) 

당신이 할 수있는 이제 모든 통지 등을 log_addition(request, object)으로 기록하고 목적에 맞게 로그 테이블을 필터링하십시오! 당신이 또한 변경/삭제 등을 기록하고 싶다면 당신은 그 자신을 위해 어떤 도우미 기능을 만들 수 있습니다!

+0

음, 그게 재미 있어요! 나는이 방법을 시도 할 것이다! 감사! :) – dana

9

이 ...

1)이 경우는 슈퍼 클래스의 이러한 속성 추상적에 더 좋을 수도 ... 나는 당신이 Event을 가질 수 있다는 것을 의미 클래스는 user 필드를 정의하고 다른 모든 이벤트 클래스는이 클래스를 서브 클래스 화합니다.

class Event(model.Model): 
    user = models.ForeignKey(User) 
    date = ... 

class Reply(Event): 
    #additional fields 

class Vote(Event): 
    #additional fields 

그럼 당신은 모델 상속에 대한 정보를

Event.objects.order_by("date") #returns both Reply, Vote and Event 

체크 아웃 http://docs.djangoproject.com/en/1.2/topics/db/models/#id5 다음을 수행 할 수있을 것입니다.

2) Event 모델은 다른 개체와 일반적인 관계가 있습니다. 개념적으로 "이벤트"가 아니므로 Vote이 더 깨끗해 보입니다. 체크 아웃 : http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#id1

을 어쨌든, 나는 당신의 문제가 세바스티안의 제안 번호 2로 디자인

또한
+0

네, 유일한 해결책 인 것 같습니다. 감사! – dana

+1

일반 관계에 +1. –

+0

어쨌든 '하위 클래스'메서드를 사용하는 경우 새로 작성한 모델을 채우고 내 템플릿을 조작 할 변수를 얻기 위해 위의 쿼리를 어떻게 변경해야합니까? djangoproject 참조에 예제가 표시되지 않습니다. 감사합니다. – dana