2013-01-22 17 views

Trả lời

32

Sử dụng values() để có được thuộc tính cụ thể mà sẽ trả về cho bạn danh sách của dicts, như

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

EDIT: Nếu bạn muốn chỉ có một thuộc tính thì bạn có thể sử dụng flat=True gợi ý để trở lại chỉ danh sách các giá trị. Tuy nhiên, hãy chắc chắn trong thứ tự danh sách sẽ là gì.

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

Làm cách nào để chỉ nhận được Id: [{'files_id': 1L}] từ số nguyên này. – user1881957

+1

@ user1881957, kiểm tra cập nhật, bạn có thể sử dụng nếu tham số 'flat = True'. – Rohan

+0

TypeError: values ​​() nhận đối số từ khóa không mong muốn 'flat' – user1881957

1

gọi Share.objects.filter() bạn trả lại Djagno QuerySet đối tượng mà không phải là một hồ sơ duy nhất, nhưng một iterable của các đối tượng được lọc từ cơ sở dữ liệu với mỗi mục là một trường hợp Share. Có thể cuộc gọi filter của bạn sẽ trả về nhiều mục.

Bạn có thể lặp qua các QuerySet sử dụng một vòng lặp như:

for share in files_s: 
    print share.files_id 

Nếu bạn biết rằng truy vấn của bạn chỉ được dự kiến ​​sẽ trả về một mục duy nhất, bạn có thể làm:

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

mà sẽ trả về một cá thể Share duy nhất mà từ đó bạn có thể truy cập thuộc tính files_id. Một ngoại lệ sẽ được nâng lên nếu truy vấn trả về bất kỳ kết quả nào khác ngoài 1 kết quả.

Các vấn đề liên quan