2013-02-16 9 views
5

Django Docs state che è possibile stampare HTML personalizzato per i campi di sola lettura nell'interfaccia di amministrazione. Questo è esattamente ciò di cui ho bisogno, ma non sembra funzionare.Il metodo Readonly per campo nell'interfaccia di amministrazione Django non viene mai chiamato

In admin.py:

from django.contrib import admin 

class ExampleAdmin(admin.ModelAdmin): 
    readonly_fields = ('myfield',) 

    def myfield(self, instance): 
     print 'This part of the code is never reached!' 
     return u'<b>My custom html for the readonly field!</b>' 

    myfield.allow_tags = True 

admin.site.register(State, StateAdmin) 

In models.py:

class State(models.Model): 
    myfield = MyCustomField() 
    ... etc ... 

class MyCustomField(models.TextField): 
    def to_python(self, value): 
     ... etc ... 

il campo viene visualizzato come di sola lettura sulla pagina di amministrazione di modifica. Tuttavia, il metodo "myfield" che dovrebbe creare html personalizzato non viene mai chiamato.

Qualcuno sa cosa sto facendo male?

Cordiali saluti,

Patrick

risposta

11

Guardando il "Django/contrib/admin/util.py" il metodo del file lookup_field, questo sembra essere il comportamento previsto. Ecco il codice che si sta utilizzando:

readonly_fields = ('myfield',) 

Dal myfield è un campo effettivo definito nel modello, averlo in readonly_fields renderà solo non modificabile; non ti consentirà di personalizzare ciò che viene visualizzato all'utente. Per fare ciò, devi dare a readonly_fields qualcosa che non sia un campo reale, come myfield_readonly. Dovrai quindi rinominare il tuo metodo myfieldmyfield a myfield_readonly, naturalmente, così come lo myfield.allow_tags = True. Probabilmente vorrai anche aggiungere myfield_readonly.short_description = 'My Field'. Infine, ti consigliamo di lasciare il campo myfield effettivo utilizzando il modulo exclude o fields.

Problemi correlati