2012-02-07 33 views
10

Tôi đang cố gắng để đạt được một cái gì đó đơn giản nhưng tôi không thể tìm thấy bất kỳ câu trả lời, không phải trên Google cũng không ở đây. Tôi có một mô hình Django, một cái gì đó chết đơn giản:Tìm kiếm theo id khóa nước ngoài trong quản trị

class Shipment(models.Model): 
    id = models.AutoField(primary_key=True) 
    transaction = models.ForeignKey(Transaction) 

Tôi muốn có thể tìm kiếm trong trang Quản trị lô hàng của tôi theo transaction.id. Để rõ ràng, Tôi muốn điều này (mã này rõ ràng là không hoạt động):

class ShipmentAdmin(admin.ModelAdmin): 
    list_display = ('id', 'transaction') 
    search_fields = ['id', 'transaction.id'] 

này không thể làm việc nguyên nhân transaction.id không tên một lĩnh vực. Bất kỳ ý tưởng? Bằng "tìm kiếm", tôi có nghĩa là có thể chèn id giao dịch của tôi bên trong hộp tìm kiếm của trang Quản trị Lô hàng, nhấn "tìm kiếm" và tự động truy xuất các giao dịch thích hợp.

Trả lời

25

như với các tùy chọn quản trị khác, bạn cần sử dụng __ for foreign key s ví dụ

search_fields = ['id', 'transaction__id'] 
+0

Cảm ơn, nó làm việc :) –

+0

Nó dường như không có tác dụng nếu bạn đang đi lên hai cấp độ của khóa ngoài, tức là 'allocation__project__name' không hoạt động nơi phân bổ có FK cho dự án và dự án có tên. Làm thế nào để bạn giải quyết điều đó? Tôi tiếp tục nhận được các " không phải là một callable, một thuộc tính của " – radtek

+1

@radtek, mà dường như làm việc cho tôi, tôi có thể làm fk1__fk2__field, chỉ cố gắng trong 1,7 tho, được phân bổ và dự án chỉ ForeignKey()? – JamesO

4

search_fields documentation:

Bạn cũng có thể thực hiện một tra cứu liên quan về một ForeignKey hoặc ManyToManyField với các API tra cứu "làm theo" ký hiệu

Giải pháp:

search_fields = ['id', 'transaction__id'] 
+0

Cảm ơn bạn đã liên kết doc :) –

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