2010-11-01 7 views
8

Mam modelu django tak:Django - wartość Dostęp ForeignKey bez uderzania bazy

class Profile_Tag(models.Model): 
    profile = models.ForeignKey(Profile) 
    tag = models.ForeignKey(Tag) 

i widok tak:

pts = Profile_Tag.objects.all() 
for pt in pts: 
    print pt.profile.id 

jest jakiś sposób, aby uzyskać dostęp do ForeignKey profil bez uderzania baza danych za każdym razem? Nie chcę wysyłać zapytania do tabeli profili. Chcę tylko pobrać identyfikatory z tabeli Profile_Tag.

+1

Skąd wiadomo, że "trafia" do bazy danych? Istnieje obszerne zarządzanie pamięcią podręczną zarówno w warstwie ORM, jak i w bazie danych. –

+0

Cóż, dla każdego, kto to czyta i odpowiada na pytanie Lott'a ... robi to trafienie DB w Django 1.4 (przynajmniej). Możesz włączyć rejestrowanie bazy danych, aby zobaczyć wszystkie zapytania, a 'pt.profile.id' powoduje zapytanie, natomiast' pt.profile_id' nie. Możliwe, że wywołanie ".id" nie spowoduje trafienia, więc może się to zmienić w przyszłości (lub już jest inaczej, nie testowałem nowszych wersji). –

Odpowiedz

10

można zrobić coś takiego:

pt_ids = Profile_Tag.objects.values_list('profile', flat=True) 

To spowoduje powrót listę identyfikatorów. W przypadku wystąpienia modelu istnieje inny sposób:

pts = Profile_Tag.objects.all() 
for pt in pts: 
    print pt.profile_id 
+0

doskonała. Dziękuję Ci. Domyślam się, że powinienem pomyśleć, by spróbować tego – Jesse

Powiązane problemy