2012-07-15 30 views
5

Trong Django, trên một thiết lập được đề nghị, một cá thể UserProfile được liên kết bởi OneToOneField với cá thể Người dùng của nó.Cách hiệu quả nhất để truy xuất người dùng bằng userprofile ở Django

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    data = ... 

Cách hiệu quả nhất trong chế độ xem để truy xuất cả người dùng và tiểu sử là gì? Tôi có thể thực hiện truy vấn nối trong select_related(), để lấy cả hai đối tượng với một lần truy cập cơ sở dữ liệu không? Hay nó luôn luôn đi xuống đến hai cuộc gọi riêng biệt? Có thể, phần mềm trung gian auth của Django truy xuất cá thể người dùng ngay cả trước khi khung nhìn được gọi là ... có ai biết không?

+1

Để cung cấp thêm thông tin chi tiết: Các hồ sơ có thể được lấy ra qua request.user.userprofile hoặc request.user.get_profile(). Tuy nhiên, cả hai kết quả trong hai lần truy cập cơ sở dữ liệu. Câu hỏi của tôi là: chúng ta có thể giảm điều này chỉ với một truy vấn nối bên trong bằng cách sử dụng select_related ... và nếu vậy: điều này có hiệu quả hơn cách "thông thường" không? –

Trả lời

1

Hồ sơ người dùng có thể được truy xuất bằng cách sử dụng get_profile().

Xem tài liệu: https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

+0

Django đề cập đến một nơi nào đó, get_profile lưu trữ kết quả của nó, nhưng điều đó đúng với tất cả các yêu cầu như vậy. Vì vậy, tôi thực sự không thấy lợi thế khi so sánh với "user.userprofile". Nhưng điều thực sự làm tôi bối rối, đó là khi sử dụng cả hai user.get_profile và user.userprofile, trong cùng một khuôn mẫu, cơ sở dữ liệu bị nhấn hai lần. Vì vậy, cho đến bây giờ, tôi luôn gắn bó với user.userprofile. Aynway, cả hai phương pháp truy xuất kết quả hồ sơ trong 2 lần truy cập cơ sở dữ liệu: 1x hồ sơ người dùng + 1x. Một cuộc gọi select_related làm điều đó trong ONE tham gia bên trong. Điều đó có thể và có lợi không? –

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