2013-01-22 15 views

Odpowiedz

32

użytkowania values() uzyskać szczególną cechę, która spowoduje powrót listę dicts, jak

file_s = Share.objects.filter(shared_user_id=log_id).values('files_id') 

EDIT: Jeśli chcesz tylko jeden atrybut można użyć flat=True sugerować powrót tylko listy wartości. Upewnij się jednak, w jakiej kolejności będzie lista.

file_s = Share.objects.filter(shared_user_id=log_id).values_list('files_id', flat=True).order_by('id') 
+0

Jak mogę uzyskać tylko identyfikator: [{'files_id': 1L}] z tego w liczbie całkowitej. – user1881957

+1

@ user1881957, sprawdź aktualizację, możesz skorzystać z parametru 'flat = True'. – Rohan

+0

TypeError: values ​​() otrzymało nieoczekiwany argument słowa kluczowego "flat" – user1881957

1

Twój Share.objects.filter() wywołanie zwraca Djagno QuerySet obiekt, który nie jest pojedynczy rekord, ale iterowalny filtrowanych obiektów z bazy danych ze każdy element jest instancją Share. Możliwe, że twoje połączenie filter zwróci więcej niż jeden przedmiot.

Można iteracyjne nad QuerySet za pomocą pętli, takich jak:

for share in files_s: 
    print share.files_id 

Jeśli wiesz, że oczekuje się tylko do powrotu pojedynczy element zapytanie, można zrobić:

share = Share.objects.get(shared_user_id=log_id) 

który zwróci pojedynczą instancję Share, z której można uzyskać dostęp do atrybutu files_id. Wyjątek zostanie zgłoszony, jeśli zapytanie zwróci wynik inny niż 1.

Powiązane problemy