2011-06-14 1 views

Répondre

1

Je ne sais pas où vous voulez ajouter vos trucs, mais c'est une solution que je trouve un autre endroit sur le SO de changer le code HTML de un FileField (dans mon cas, je voulais afficher l'image actuelle dans un ImageField).

En d'autres termes, vous pouvez faire un widget qui modifie le code html du champ que vous souhaitez personnaliser:

# Widget that modifies the output of a FileField 
class OutputWidget(AdminFileWidget): 
    # Overloaded django magic 
    def render(self, name, value, attrs=None): 
     output = [] 
     # This is the place where we edit the output  
     if value and getattr(value, "url", None): 
      image_url = value.url 
      output.append(u' <a href="%s" target="_blank"><img src="%s" alt="%s" /></a>' % (image_url, image_url, image_url)) 
     output.append(super(AdminFileWidget, self).render(name, value, attrs)) 
     return mark_safe(u''.join(output)) 

# ModelAdmin class that is applied to the model 
class MyModelSettings(admin.ModelAdmin): 
    # Overloaded django magic 
    def formfield_for_dbfield(self, db_field, **kwargs): 
     # Look for the field we want to edit and register the widget with it 
     if db_field.name == 'nameOfFieldIWantToEdit': 
      request = kwargs.pop("request", None) 
      kwargs['widget'] = OutputWidget 
      return db_field.formfield(**kwargs) 
     return super(MyModelSettings,self).formfield_for_dbfield(db_field, **kwargs) 

# Register my overloaded settings with the model 
admin.site.register(MyModel, MyModelSettings) 

Le code va dans admin.py où vous enregistrez vos modèles.

0

J'utilise la solution de Omokoli d'en haut, mais pour rendre le champ utiliser mon widget personnalisé Je l'ai fait:

 
class MyModelAdminForm(forms.ModelForm): 
    class Meta: 
     model = get_model('myapp', 'mymodel') 
     widgets = { 
      'original_link': OutputWidget, 
     } 
Questions connexes