ProfiloUtente StackedInLine / TabularInLine ridisegnato
Domanda
Ciao a tutti e grazie per la lettura.
Ho un problema semplice che voglio sbarazzarsi di e non ho visto esempi in cui questo è stato ancora raggiunto, anche se la ricerca intorno alla rete per un bel po '.
I recentemente ampliato con ProfiloUtente quindi il mio admin.py assomiglia a questo:
from django.contrib import admin
from django.contrib.auth.models import User
from models import UserProfile
from django.contrib.auth.admin import UserAdmin
admin.site.unregister(User)
class UserProfileInline(admin.StackedInline):
model = UserProfile
class UserProfileAdmin(UserAdmin):
# fieldsets = [
# (None, {'fields': ['image']}),
# ('Avatar', {'fields': ['text'], 'classes': ['collapse']}),
# ]
inlines = (UserProfileInline,)
admin.site.register(User, UserProfileAdmin)
e models.py in questo modo:
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
# Required
user = models.ForeignKey(User, unique=True)
image = models.ImageField(upload_to='media/users/', blank=True, help_text="Your face")
text = models.TextField(blank=True, help_text="Write something about yourself")
In an app called users that is referred to by settings.py with:
AUTH_PROFILE_MODULE = users.UserProfile
1
Fondamentalmente quello che voglio ottenere è quello di sbarazzarsi del # 1 StackedInLine che mostra in Admin. La ragione per cui io uso StackedInLine invece di TabularInLine è perché altrimenti ho un "Delete?" colonna a destra e trovo optional così vorrei né escludere tale o sbarazzarsi della numerazione # 1 in StackedInLine.
Questo è ciò che sembra nel "mondo reale" .. (contrassegnati con colore rosso)
Stacked: hxxp: //i28.tinypic.com/2lsadkg.jpg
tabulare: hxxp: //i27.tinypic.com/4lybs.jpg
2
Anche. Mi chiedo perché non posso usare fieldsets quando ho caricato il file di models.py ProfiloUtente in admin.py. Si dice semplicemente il campo non esiste. Devo chiamare i campi in modo diverso rispetto a Django / contrib / auth / admin.py dove ho visto funziona?
Se ti senti come c'è un modo più efficiente di fare questo dimmi solo. Sono aperto a tutte le risposte.
Soluzione
1
Credo che stai ricevendo troppo esigente qui. Se è assolutamente necessario controllo su tali dettagli minuti si dovrebbe creare le proprie opinioni invece di usare l'amministratore. In caso contrario, accatastati è ciò che si vuole, perché tabellare non ha molto senso per le relazioni one-to-one.
2
Sono stato in grado di utilizzare fieldsets nei profili utente. L'unica differenza tra il mio codice e la tua sembra essere che sto usando tuple di invece di dict di. Ecco il mio per il confronto:
class UserProfileInline(admin.StackedInline):
model = UserProfile
class MyUserAdmin(UserAdmin):
inlines = [UserProfileInline]
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
(_('Groups'), {'fields': ('groups',)}),
)
exclude = ['user_permissions']
Modifica :
Ho appena fatto un rapido controllo e la "# 1" è venuta dal modello di amministrazione.
Questo significa che è possibile rimuovere facilmente l'override del modello stock di amministrazione, anche se questo avrà effetto su tutti i tuoi inline tra cui quelli che sono uno-a-molti.
Il modello in linea impilati può essere trovato in django/contrib/admin/templates/admin/edit_inline/stacked.html
Questo significa che è possibile copiare il modello per la propria cartella templates come templates/admin/edit_inline/stacked.html
e questo verrà caricato da Django in fase di esecuzione al posto del modello stock.
Dopo aver copiato modificare la copia locale per rimuovere #{{ forloop.counter }}
sulla linea 9.