Non ho trovato questo nei documenti, ma penso che sia possibile. Sto parlando specificatamente del widget ClearableFileInput. Da un progetto in Django 1.2.6 ho questo modulo:Come posso personalizzare l'output html di un widget in Django?
# the profile picture upload form
class ProfileImageUploadForm(forms.ModelForm):
"""
simple form for uploading an image. only a filefield is provided
"""
delete = forms.BooleanField(required=False,widget=forms.CheckboxInput())
def save(self):
# some stuff here to check if "delete" is checked
# and then delete the file
# 8 lines
def is_valid(self):
# some more stuff here to make the form valid
# allthough the file input field is empty
# another 8 lines
class Meta:
model = SocialUserProfile
fields = ('image',)
che ho poi resi utilizzando questo codice modello:
<form action="/profile/edit/" method="post" enctype="multipart/form-data">
Delete your image:
<label> {{ upload_form.delete }} Ok, delete </label>
<button name="delete_image" type="submit" value="Save">Delete Image</button>
Or upload a new image:
{{ upload_form.image }}
<button name="upload_image" type="submit" value="Save">Start Upload</button>
{% csrf_token %}
</form>
Come Django 1.3.1 ora usa ClearableFileInput come il widget di default, i 'm abbastanza sicuro che posso saltare le 16 linee della mia form.save e basta accorciare il codice del modulo in questo modo:
# the profile picture upload form
class ProfileImageUploadForm(forms.ModelForm):
"""
simple form for uploading an image. only a filefield is provided
"""
class Meta:
model = SocialUserProfile
fields = ('image',)
che mi avrebbe dato il buon feeling che ho formcode meno personalizzata, e può contare su ° e Django builtins.
Mi piacerebbe, naturalmente, mantenere l'output html uguale a prima. Quando si utilizza semplicemente il codice del modello esistente, elementi come "Attualmente: somefilename.png" vengono visualizzati in luoghi in cui non li desidero.
La suddivisione del campo del modulo ulteriormente, come non sembra funzionare. La prossima cosa che mi venne in mente fu di scrivere un widget personalizzato. Quale funzionerebbe esattamente contro i miei sforzi per rimuovere il maggior numero possibile di codice personalizzato.
Qualche idea quale sarebbe la cosa più semplice da fare in questo scenario?
risposta breve: FASE 1: estendere il widget di classe FASE 2: ignorare il widget di per il vostro campo Nota: vuoi per utilizzare il widget sottoclasse creato nel passaggio 1 nel metodo '__init__' del modulo django. Se hai bisogno di esempi, fammelo sapere e lo colpirò questo pomeriggio. –
L'ultima cosa a cui stavo pensando è di ignorare semplicemente il modello utilizzato dal widget. Ti sarei grato per questo pomeriggio (sei ovviamente in un altro continente come me, dato che qui sono già le 16:15: D) – marue
sì, quando esco dal lavoro, ti sparo un esempio. ~ 5 ore circa –