2010-06-07 50 views
8

vamos a suponer que tengo modelo muy básicodjango-admin - cómo modificar ModelAdmin para crear múltiples objetos a la vez?

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

este modelo se ha registrado en el módulo de administración:

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

Actualmente cuando voy a la interfaz de administración, después de hacer clic en "Agregar mensaje" Sólo tengo una forma donde puedo ingresar al msg.

Me gustaría tener varios formularios (formset quizás) en la "Agregar página" para que pueda crear varios mensajes a la vez. Es realmente molesto tener que hacer clic en "Guardar y agregar otro" cada vez.

Idealmente me gustaría lograr algo como InlineModelAdmin pero resulta que puede usarlo solo para los modelos que están relacionados con el objeto que se edita.

¿Qué recomendarías para resolver este problema?

Respuesta

1

Como solución temporal, Dado, es probable que usted tiene una FK a User, por lo que podría definir un InlineModel en el modelo User.

De lo contrario, el enfoque más fácil puede ser crear una vista de administrador personalizada, ya que no hay una vista de administrador genérica que muestre y guarde los conjuntos de formularios.

+0

Lamentablemente no tengo ningún FK en este modelo, así que esto no funciona para mí. Descubriré si es posible conectar la vista personalizada en el administrador de django. – skrobul

3

Esto puede no ser exactamente lo que está buscando, pero si desea crear varios objetos al mismo tiempo que pudo para somehthing así:

#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() 

Básicamente lo que está haciendo es crear una costumbre formulario para su plantilla de administrador, que le pregunta al usuario cuántas veces se creará el objeto. La lógica se interpreta en el método save_model.

+0

Esto funcionará, pero solo para formularios de administración muy simples. Por ejemplo, si hay líneas en el administrador, entonces Pandemonium! – frnhr

0

Esto es fácil si está utilizando un Inline. Entonces podría usar extra = 10 o cuantos formularios adicionales desee. No parece haber un equivalente para el ModelAdmin.

Por supuesto, en su modelo de mensajes necesitaría crear un ForeignKey a algún tipo de modelo de agrupación de mensajes como otra capa de función y para obtener el diseño de múltiples formularios que está buscando.

Por ejemplo:

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) 

Esto le daría lo que quiere en la vista de administración y crear la agrupación (incluso si sólo se permiten para un grupo) y el único campo adicional sería la name en el grupo modelo. Ni siquiera estoy seguro de que lo necesites. También estoy seguro de que el valor de extra se podría generar dinámicamente para un valor arbitrario.

Espero que esto ayude!

Cuestiones relacionadas