2010-06-07 10 views
8

supponiamo che ho modello molto semplicedjango-admin - come modificare ModelAdmin per creare più oggetti contemporaneamente?

class Message(models.Model): 
     msg = models.CharField(max_length=30) 

questo modello è iscritto modulo di amministrazione:

class MessageAdmin(admin.ModelAdmin): 
    pass 
admin.site.register(Message, MessageAdmin) 

Attualmente quando entro in l'interfaccia di amministrazione, dopo aver fatto clic su "Aggiungi messaggio" Ho solo un modulo in cui posso inserire il msg.

Mi piacerebbe avere più moduli (formset forse) sulla "Aggiungi pagina" così posso creare più messaggi contemporaneamente. È davvero fastidioso dover fare clic su "Salva e aggiungi un altro" ogni volta.

Idealmente mi piacerebbe ottenere qualcosa come InlineModelAdmin ma si scopre che è possibile utilizzarlo solo per i modelli correlati all'oggetto che viene modificato.

Cosa consiglieresti di utilizzare per risolvere questo problema?

risposta

1

Come soluzione temporanea, poiché è probabile che si disponga di un FK a User, pertanto è possibile definire un modello User nel modello User.

In caso contrario, l'approccio più semplice potrebbe essere quello di creare una visualizzazione amministrativa personalizzata poiché, non esiste una visualizzazione amministrativa generica che visualizza e salva i formati.

+0

Sfortunatamente non ho FK in questo modello, quindi questo non funziona da me. Scoprirò se è possibile collegare la visualizzazione personalizzata all'amministratore di django. – skrobul

3

Questo potrebbe non essere esattamente quello che stai cercando, ma se si desidera creare più oggetti allo stesso tempo che si poteva per somehthing in questo modo:

#In /forms.py 
MessageAdminForm(forms.ModelForm): 
    msg = CharField(max_length=30) 
    count = IntegerField() 

#In /admin.py 
from app.admin import MessageAdminForm 
MessageAdmin(admin.ModelAdmin): 
    form = MessageAdminForm 
    fieldsets = (
     (None, { 
      'fields' : ('msg','count')  
     }),) 
    def save_model(self, request, obj, form, change): 
     obj.msg = form.cleaned_data['msg'] 
     obj.save() 
     for messages in range(form.cleaned_data['count']): 
      message = Message(msg=form.cleaned_data['msg']) 
      message.save() 

Fondamentalmente quello che stai facendo è la creazione di un custom modulo per il tuo modello di amministrazione, che chiede all'utente quante volte l'oggetto deve essere creato. La logica è interpretata nel metodo save_model.

+0

Funzionerà, ma solo per moduli di amministrazione molto semplici. Ad esempio, se ci sono inline nell'amministratore, allora Pandemonium! – frnhr

0

Questo è facile se si utilizza un Inline. Quindi è possibile utilizzare extra = 10 o comunque molti formati aggiuntivi che si desidera. Non sembra essere un equivalente per lo ModelAdmin.

Ovviamente nel modello dei messaggi è necessario creare un modello ForeignKey come modello di raggruppamento dei messaggi come un altro livello di funzione e ottenere il layout a più moduli che si sta cercando.

Ad esempio:

models.py: 
    class Group(models.Model): 
     name = models.CharField(max_length=30) 
    class Message(models.Model): 
     msg = models.CharField(max_length=30) 
     grp = models.ForeignKey(Group) 

admin.py: 
    class MessageInline(admin.TabularInline): 
     model = Message 
     extra = 10 
    class GroupAdmin(admin.ModelAdmin): 
     inlines = [MessageInline] 
    admin.site.register(Group, GroupAdmin) 

Questo darebbe quello che vuoi nella vista amministratore e creare raggruppamento (anche se si consente solo per un gruppo) e l'unico campo in più sarebbe il name nel gruppo modello. Non sono nemmeno sicuro che ne avresti bisogno. Inoltre sono sicuro che il valore di extra potrebbe essere generato dinamicamente per un valore arbitrario.

Spero che questo aiuti!

Problemi correlati