2012-04-18 19 views
5

Buonasera,Estensione del profilo utente in Django. Admin creazione di utenti

Attualmente sto creando un sito con Django e ho esteso l'utente con un profilo utente. Ho un piccolo problema però. Ecco la mia situazione:

  1. Ho esteso il profilo utente per aggiungere campi personalizzati.
  2. Ho aggiunto il modello al modello di amministratore degli utenti, quindi quando aggiungo un utente, posso compilare direttamente i campi per creare il profilo.
  3. Ora, se non aggiungo QUALSIASI in questi nuovi campi utente personalizzati, nella pagina di aggiunta dell'utente, Django Admin non mi inoltrerà un errore dicendo che questi campi sono nulli (e non suppongono di essere)
  4. Desidero che venga visualizzato un errore in questa pagina Aggiungi amministratore utente, in modo che gli amministratori DEVONO compilare un profilo quando si aggiunge un nuovo utente.
  5. TUTTI gli utenti verranno aggiunti nel Pannello di amministrazione.

È possibile? Molte grazie!

in admin.py

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin 
from django.contrib.auth.models import User 
from accounts.models import UserProfile 


class UserProfileInline(admin.TabularInline): 
    model = UserProfile 


class UserAdmin(DjangoUserAdmin): 
    inlines = [ UserProfileInline,] 


admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

In model.py

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    employee_number = models.PositiveIntegerField(unique=True) 

    def __unicode__(self): 
     return 'Number' 

risposta

5

Per default, linea vuota viene consentito e quindi nessun ulteriore controllo sarebbe presa per una forma vuota. Hai bisogno di sovrascriverlo manualmente:

class UserProfileForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(UserProfileForm, self).__init__(*args, **kwargs) 
     if self.instance.pk is None: 
      self.empty_permitted = False # Here 

    class Meta: 
     model = UserProfile 


class UserProfileInline(admin.TabularInline):   
    model = UserProfile        
    form = UserProfileForm 
+0

Bello ha funzionato! Ti spiace spiegare un po 'di più cosa fa il codice? Soprattutto la Meta di classe: parte! Grazie amico – abisson

+0

Inoltre, quale sarebbe la sintassi se volessi che solo uno dei miei campi fosse vuoto_permato = falso? e il resto è vero? – abisson

+0

@abisson 'empty_permitted' è un parametro non documentato che' BaseForm' accetta: quando un modulo inviato non è stato modificato dai suoi dati iniziali, ed è 'empty_permitted' è' True', 'full_clean()' del modulo non verrà eseguito ogni ulteriore convalida. Puoi controllare 'empty_permitted' in' django/forms/forms.py' e 'django/forms/formsets.py'. Se si desidera che uno dei campi non sia vuoto, si può provare a impostare 'empty_permitted = True' per il modulo e' blank = True' per altri campi. – okm

Problemi correlati