Muszę dodać atrybut title do opcji modelu ModelChoiceField. Oto mój kod administratora:Jak dodać atrybuty do znaczników opcji w 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
Mogę dodać dowolny atrybut do wyboru widżetu, ale nie wiem, jak dodać atrybuty do znaczników opcji. Dowolny pomysł ?
Czy istnieje jakiś szczególny powód, dla którego pola powinny być modyfikowane w wewnętrznej metodzie "Meta" zamiast w metodzie "__init__"? Czy to samo rozumowanie miałoby zastosowanie do modyfikowania/dodawania atrybutów widżetów dla pola? – hellsgate
@hellsgate W większości przypadków nie ma powodu, aby nie przesłonić '__init__', aby ustawić' widget.attrs'. W większości przypadków użycia, takich jak modyfikowanie atrybutów html na innym domyślnym widżecie * nie * robienie tego za pośrednictwem '__init__' narusza DRY. Niestety dla przypadku OP, będzie musiał zdefiniować niestandardowy widget, ponieważ znacznik '
Podejście to można również wykorzystać do rozszerzenia widżetu 'SelectMultiple'. Po prostu podklasuj 'SelectMultiple' i przekaż mu niestandardowy widżet' MySelect'. – NickBraunagel