Tôi phải thêm thuộc tính tiêu đề vào các tùy chọn của ModelChoiceField. Đây là mã quản trị của tôi cho rằng:Làm cách nào để thêm thuộc tính vào thẻ tùy chọn trong django?
class LocModelForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
super(LocModelForm,self).__init__(*args,**kwargs)
self.fields['icons'] = forms.ModelChoiceField(queryset = Photo.objects.filter(galleries__title_slug = "markers"))
self.fields['icons'].widget.attrs['class'] = 'mydds'
class Meta:
model = Loc
widgets = {
'icons' : forms.Select(attrs={'id':'mydds'}),
}
class Media:
css = {
"all":("/media/css/dd.css",)
}
js=(
'/media/js/dd.js',
)
class LocAdmin(admin.ModelAdmin):
form = LocModelForm
Tôi có thể thêm bất kỳ thuộc tính nào để chọn tiện ích nhưng tôi không biết cách thêm thuộc tính vào thẻ tùy chọn. Bất kỳ ý tưởng ?
Có lý do cụ thể nào khiến các trường phải được sửa đổi trong lớp bên trong 'Meta' thay vì phương thức' __init__' không? Và lý do tương tự sẽ áp dụng cho việc sửa đổi/thêm các thuộc tính widget cho một trường? – hellsgate
@hellsgate Trong hầu hết các trường hợp, không có lý do gì để không ghi đè '__init__' để đặt' widget.attrs'. Trong phần lớn các trường hợp sử dụng, chẳng hạn như sửa đổi thuộc tính html trên một tiện ích con mặc định khác * không * làm như vậy thông qua ghi đè '__init__' vi phạm DRY. Thật không may cho trường hợp của OP, anh ta sẽ phải xác định một widget tùy chỉnh vì thẻ '
Cách tiếp cận này cũng có thể được sử dụng để mở rộng tiện ích 'SelectMultiple'. Chỉ cần phân lớp 'SelectMultiple' và chuyển nó thành widget' MySelect' tùy chỉnh. – NickBraunagel