2010-03-10 28 views
9

Tôi có hai kiểu, DesignProfile. Hồ sơ được nối trong settings.py như hồ sơ được sử dụng với mô hình Người dùng. Vì vậy, tôi có thể truy cập nó qua user.get_profile().Làm cách nào để lọc truy vấn theo thuộc tính của hồ sơ người dùng ở Django?

Và mỗi cá thể Design có thuộc tính author là Khóa ngoại tuyến cho người dùng.

Vì vậy, khi tôi bất kỳ xem, tôi có thể lấy screenname (một tài sản của hồ sơ) theo:

user.get_profile().screenname

Nhưng cú pháp để tìm kiếm theo LỌC cho thuộc tính này là gì? Những gì tôi hiện có:

designs = Design.objects.filter(author__userprofile__screenname__icontains=w)

Điều này không hiệu quả. Suy nghĩ?

Trả lời

8

Nếu lớp hồ sơ của bạn được đặt tên hồ sơ, và bạn đã không được tùy chỉnh User < -> Hồ sơ liên quan sử dụng tài sản related_name của ForeignKey, sau đó nên không được truy cập thông qua:

designs = Design.objects.filter(author__user__profile__screenname__icontains=w) 

Các Người dùng -> Tiểu sử kéo dài một mối quan hệ để bạn cần thêm dấu gạch dưới kép.

+0

Đóng. Tôi cần làm: author__profile__screenname. Cảm ơn đã giúp đỡ! – Sebastian

+1

Không chắc chắn nếu điều này đã thay đổi, nhưng đối với tôi (sử dụng Django 1.3) tôi đã phải sử dụng _____userprofile_____ và không _____profile_____ – mhost

+2

@mhost Nó phụ thuộc vào cách bạn đặt tên cho lớp hồ sơ người dùng của bạn, vì nó không phải là một mô hình được xây dựng. Điều này sẽ làm việc cho bất kỳ mô hình nào với OneToOneField trỏ đến mô hình Người dùng –

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