2011-06-27 17 views
18

En forma de complemento para cualquier aplicación en django admin, para campos de clave externa de ese modelo ... aparece una lista desplegable con el botón Agregar (que se abre en una ventana emergente). ¿Podemos tener un formulario donde podamos agregar los campos del modelo de clave externa en la misma forma?django admin datos de campo de clave externa agregue

Para por ejemplo

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    contact = models.ForeignKey(Contact, blank=True, null=True) 

Para el usuario y los campos de contacto de un desplegable con el botón Agregar está presente en Admin Añadir form.Can tenemos todos los campos de usuario y contacto en misma página ??

Respuesta

11

Sí, puede hacerlo utilizando el sistema de administración en línea.

class UserAdmin(admin.StackedInline): 
    model = User 
class ContactAdmin(admin.StackedInline): 
    model = Contact 

class UserProfileAdmin(admin.ModelAdmin): 
    inlines = [ UserAdmin, ContactAdmin ] 

para más detalles echa un vistazo a https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects .

+0

Tha nks Darioush, Pero no funciona, el sistema de administración en línea funciona para el caso opuesto, como en el manual que puede ver [enlace] (https://docs.djangoproject.com/en/dev/ref/contrib/admin/ # inlinemodeladmin-objetos) Para el caso anterior, si lo hubiera requerido que funciona como: ' UserProfileAdmin clase (admin.StackedInline): modelo = PerfilUsuario clase UserAdmin (admin.ModelAdmin): inlines = [UserProfileAdmin] ' De la forma en que usted da un error' no tiene ForeignKey en ' – Neo

+1

Lo siento, mi mal. Aparentemente no hay una manera fácil de hacer que funcione, consulte http://stackoverflow.com/questions/6419248/inline-like-solution-for-django-admin-where-admin-contains-foreignkey-to-other-mo for más información – Darioush

0

Hay una Django complemento para obtener inlines en casos como este, donde la relación es lo contrario de lo habitual: django_reverse_admin

Usted tendrá que añadir a su django_reverse_admin requirements.txt:

-e git+https://github.com/anziem/django_reverse_admin.git#egg=django_reverse_admin 

A continuación, importe que:

admin.py

from django_reverse_admin import ReverseModelAdmin 

class UserProfileAdmin(ReverseModelAdmin): 
    inline_reverse = ['user', 'contact'] 
    inline_type = 'tabular' # or could be 'stacked' 

admin.site.register(UserProfile, UserProfileAdmin) 
Cuestiones relacionadas