2009-03-04 6 views
2

에 가입하는 것은 여기 내 모델장고 내가 장고 작업과 복잡한 쿼리</p> <p>을 수행하는 방법을 파악 힘든 시간을 보내고 있어요 쿼리

나는 탱크 개체 주어진 이름을 당길 필요가
class TankJournal(models.Model): 
    user = models.ForeignKey(User) 
    tank = models.ForeignKey(TankProfile) 
    ts = models.DateTimeField(auto_now=True) 
    title = models.CharField(max_length=50) 
    body = models.TextField() 

    class Meta: 
     ordering = ('-ts',) 
     get_latest_by = 'ts' 

입니다.

사용자 개체는 장고에 내장 된 개체입니다 .. 감사합니다!

편집 : 나는 시도

print User.objects.filter(tankjournal__tank__exact=id) 

.. 바로 ID를 빼고 tankjournal 모든 것을 꺼내와 탱크 객체에 일치하지 보인다

답변

6

하는 경우 이미 탱크 수 있습니다 :

tank.user.username 

데이터베이스 쿼리를 줄이려면 select_related()을 사용하는 것이 좋습니다.

tanks = TankJournal.objects.all().select_related() 
for tank in tanks: 
    username = tank.user.username 

당신은 특정 탱크 아이디가 있다면 : 나는 당신의 질문을 오해 할 수 있지만, User.objects.filter()에 대한 요청이 사용자 개체가 아닌 사용자 ID의 목록을 반환합니다

tank = TankJournal.objects.select_related().get(id=123456) 
username = tank.user.username 
1

. 당신이 쓴 것은 기술적으로 정확합니다.

그러나 TankProfile 개체와 TankJournal 사이에 일대 다 (one-to-many)를 설정한다는 것을 기억하십시오. 즉, 하나의 TankProfile은 둘 이상의 TankJournal과 연관 될 수 있으며, 따라서 하나 이상의 사용자와 연관 될 수 있습니다. 이 점을 감안할 때 쿼리가 올바른 일을하고있어 둘 이상의 사용자를 반환하고 있습니다.

+0

각 사용자는 여러 개의 탱크를 가질 수 있으며 .. 각 탱크에는 여러 개의 저널 항목이있을 수 있습니다. tankJournal 모델에서 User 오브젝트를 제거하는 올바른 방법은 무엇입니까? – Mike

+0

각 탱크가 여러 업무 일지 항목을 가질 수있는 경우 각 탱크에는 잠재적으로 여러 사용자가있을 수 있습니다. 단일 사용자에게만 범위를 좁히려면 다른 매개 변수가 필요합니다. TankJournal 또는 User에서 시작할지 여부는 아마도 해당 매개 변수가 무엇인지에 달려 있습니다. –