Tôi có trường biểu mẫu Tùy chỉnh TagField.Quản trị Django - Ghi đè tiện ích của trường biểu mẫu tùy chỉnh
class TagField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TagField, self).__init__(*args, **kwargs)
self.widget = forms.TextInput(attrs={'class':'tag_field'})
Như đã thấy ở trên, nó sử dụng tiện ích trường biểu mẫu TextInput. Nhưng trong admin tôi muốn nó được hiển thị bằng cách sử dụng widget Textarea. Đối với điều này, có formfield_overrides
móc nhưng nó không hoạt động cho trường hợp này.
Việc kê khai quản trị là:
class ProductAdmin(admin.ModelAdmin):
...
formfield_overrides = {
TagField: {'widget': admin.widgets.AdminTextareaWidget},
}
này không ảnh hưởng đến các widget trường biểu mẫu và tags
vẫn được trả lại với một widget TextInput.
Bất kỳ trợ giúp nào được đánh giá cao.
-
omat
Điều này không hiệu quả đối với tôi, bạn cần phải chuyển một thể hiện của tiện ích, chứ không phải là lớp học. Ví dụ, trường hợp này hoạt động hoàn hảo. –
Tôi thường sẽ tạo biểu mẫu quản trị tùy chỉnh trong admin.py và không kết hợp chúng với forms.py. Điều này làm giảm sự trộn lẫn cho các nhà phát triển khác và giữ tất cả các mục quản trị cụ thể trong cùng một tệp .py. – MaestroFJP
Điểm tốt @MaestroFJP. Tôi đã làm điều đó trong mã mới hơn của mình. Hoặc, có một mô hình con/admin.py, nếu bạn có các hình thức thực sự phức tạp, và rất nhiều trong số chúng. –