2012-02-17 39 views
57

Tôi muốn thay đổi hành vi mặc định của cách quản trị viên thay đổi gần đây bên hiển thị tên của "đối tượng" được thêm vào. Hãy tham khảo những hình ảnh dưới đây:Django "xxxxxx đối tượng" hiển thị tuỳ biến trong thanh tác vụ hành động bên

In the recent actions module, it also shows new objects as "MyModelName object"

Tôi muốn thay đổi cách chúng được có tên trong quản trị. Lý tưởng nhất, tôi muốn có thể thay đổi nó từ "đối tượng MyModelName" thành, như trong ví dụ đối tượng "Chính sách", giống như "Chính sách: {{giá trị của trường" Tên chính sách "của chính sách.}}

..

tôi đã suy nghĩ rằng __unicode__ cho mô hình Bệnh nhân của tôi xử lý này, nhưng nó không xuất hiện để Bất kỳ trợ giúp được đánh giá cao

+1

'__unicode__' làm điều đó. Dán mã của bạn để chúng tôi có thể nhìn thấy những gì sai –

Trả lời

87

__unicode__ làm điều đó. Mô hình của bạn sẽ giống như thế này:

class SomeModel(models.Model): 
    def __unicode__(self): 
     return 'Policy: ' + self.name 

Mở Python 3 bạn cần phải sử dụng __str__:

def __str__(self): 
    return 'Policy: ' + self.name 
+1

Tôi ngu ngốc đã không nhận thấy rằng tôi đã tuyên bố phương pháp unicode cho mỗi mô hình EXCEPT này. : doh: Xin lỗi tất cả. – patrickn

2

Bạn nói đúng trong suy nghĩ rằng __unicode__ làm mà tôi đã này chạy ngay bây giờ:.

class Film(models.Model): 
    title = models.CharField(max_length=200) 
    ... 
    def __unicode__(self): 
     return self.title 

Khi tôi xem trong danh sách tác vụ gần đây, tôi thấy tiêu đề của phim mà tôi vừa chỉnh sửa.

10

Chuỗi bạn nhìn thấy được phát ra từ __unicode__ phương pháp, như những người khác đã đề cập. Nhưng vấn đề là quản trị lưu biểu diễn chuỗi của đối tượng khi tạo sự kiện nhật ký, do đó nếu bạn thêm __unicode__ triển khai sau khi mục nhập nhật ký được lưu, bạn sẽ không thấy tiêu đề mới trên mục cũ, chỉ sau khi bạn thực hiện một số hoạt động mới

+0

Tôi đã tự hỏi tại sao Nhật ký hành động không hiển thị tên sau khi tôi đặt __unicode__ - Tôi nên biết đó chỉ là nhật ký được lưu trữ trong dữ liệu lấy dữ liệu db tại thời điểm tạo! –

+2

cảm ơn bạn, đã cho tôi một rắc rối lớn nếu bạn chưa giải thích rằng – dtc

1

bạn cần phải xác định, trong đó cột mà bạn muốn hiển thị ...

ví dụ:

class POAdmin(admin.ModelAdmin): 
    list_display = ('qty', 'cost', 'total') 
16

tôi đồng ý với những câu trả lời, nhưng trên máy tính của tôi chỉ không làm việc.

Tôi đã sử dụng Python3 và Django1.8 và các giải pháp đó vẫn không hoạt động đúng cách, vì vậy tôi thử với phương pháp này.

class MyModel(models.Model): 

    name = models.CharField(max_length=60) 

    def __str__(self): 
     return 'MyModel: {}'.format(self.name) 
+3

Điều này đã giải quyết cho tôi. Tôi cũng sử dụng Python3 và Django1.8. –

+0

__unicode__ không hoạt động đối với tôi nhưng điều này có tác dụng! –

+0

__str__ là cách cũ ..... nhưng python 3 với Django, cách mới (__unicode__) không hoạt động? – user798719

2

Câu trả lời đề cập đến phương pháp __str____unicode__ là chính xác. Như đã nêu trong tuy nhiên docs, kể từ phiên bản 1.6 (tôi nghĩ), bạn có thể sử dụng python_2_unicode_compatible trang trí cho cả Python 2 và Python 3:

from __future__ import unicode_literals 
from django.utils.encoding import python_2_unicode_compatible 

@python_2_unicode_compatible 
class MyClass(models.Model): 
    def __str__(self): 
     return "Instance of my class" 

Bạn có thể sử dụng trên trong phi Model đối tượng cũng .

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