2011-01-11 30 views
16

Tôi đã một mô hình cơ bản có tên là "Địa điểm" trong đó có quan điểm này:Nhận django id đối tượng dựa trên mô hình thuộc tính

def view_index(request, place_name): 

Người dùng sẽ truy cập vào quan điểm cho rằng với một URL như thế này:

http://server.com/kansas 

"kansas" là giá trị được lưu trữ trong trường có tên "tên" bên trong mô hình "Địa điểm".

Vấn đề là tôi không thể tìm ra cách lấy id đối tượng dựa trên tên đối tượng. Có cách nào để làm việc này không?

Trả lời

34

Như thế này:

place = Places.objects.get(name='kansas') 
print place.id 
+1

Ôi ... Tôi ngu ngốc, làm sao tôi có thể không hình dung nó ra? Cảm ơn :-) –

3

gì ánh xạ URL của bạn để xem mà trông như thế nào? Giả sử bạn đang chụp một phần của URL của mình với "kansas" trong đó và đang được đặt thành đối số place_name, bạn sẽ phải thực hiện một đơn giản filter trên trình quản lý của mô hình của mình trên bất kỳ trường mô hình nào bạn đang tìm kiếm "kansas" in.

Nếu ánh xạ URL của bạn trông giống như:

('(?P<place_name>\w+)$', 'myapp.view.view_index') 

Sau đó, bạn sẽ có thể làm chỉ

object_list = Model.objects.filter(place_name = place_name) 

để có được một danh sách các đối tượng người có place_name phù hợp với một trong những trong URL. Từ đó, mỗi đối tượng trong danh sách đó phải có một id (trừ khi bạn đã đổi tên trường ID) mà bạn có thể nhận được giống như bất kỳ thuộc tính đối tượng python nào khác.

3

Vì bạn chỉ muốn id, bạn chỉ nên truy vấn id. Một get ngây thơ sẽ lấy tất cả các trường trên hàng cơ sở dữ liệu. Một trong các phương pháp này sẽ chỉ truy xuất dữ liệu bạn muốn.

id = Place.objects.filter(name='kansas').values('id')[0]['id'] 

Phương pháp khác sử dụng only:

id = Place.objects.only('id').get(name='kansas').id 
+0

Điều này có thực hiện hiệu quả hơn so với câu trả lời được chấp nhận không? –

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