2017-08-10 38 views
0

前端用戶註冊表單沒有用戶名字段,因爲我使用電子郵件登錄。現在我可以訪問django admin。刪除/隱藏用戶名字段在Django admin編輯用戶表格

當我編輯用戶時,我得到該用戶名字段進行編輯,但我不希望該字段是可編輯或可查看的。

admin.py -

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 
from .models import UserProfile 

class ProfileInline(admin.StackedInline): 
    model = UserProfile 
    can_delete = False 
    verbose_name_plural = 'Profile' 
    fk_name = 'user' 

class CustomUserAdmin(UserAdmin): 
    inlines = (ProfileInline,) 
    list_display = ('email', 'first_name', 'last_name', 'is_staff') 
    list_select_related = ('profile',) 

    exclude = ('username',) 

    def get_inline_instances(self, request, obj=None): 
     if not obj: 
      return list() 
     return super(CustomUserAdmin, self).get_inline_instances(request, obj) 


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

forms.py -

from django import forms 
from django.contrib.auth.models import User 
from django.utils.translation import ugettext as _ 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Layout, Div, Field 
from ajax_select.fields import AutoCompleteSelectField, AutoCompleteField 
from phonenumber_field.formfields import PhoneNumberField 
from . import models 
from captcha.fields import ReCaptchaField 


class SignUpForm(forms.Form): 
    first_name = forms.CharField(max_length=30) 
    last_name = forms.CharField(max_length=30) 
    phone_number = PhoneNumberField(label=_("Phone (Please state your country code eg. +44)")) 
    organisation = forms.CharField(max_length=50) 
    email = forms.EmailField() 
    password1 = forms.CharField(max_length=20) 
    password2 = forms.CharField(max_length=20) 
    captcha = ReCaptchaField(attrs={'theme' : 'clean'}) 

models.py--

from __future__ import unicode_literals 
from django.db import models 
from django.contrib.auth.models import User 
from django.utils.translation import ugettext as _ 
from easy_thumbnails.fields import ThumbnailerImageField 
from ciasroot.settings import THUMBNAILER_SIZES, UPLOAD_PATH 
from ciasroot.constants import GENDERS, LANGUAGES 
from ciasroot.util import HashedPk 
from phonenumber_field.modelfields import PhoneNumberField 
import math, decimal, datetime, os 


class UserProfile(models.Model, HashedPk): 
    user = models.OneToOneField(User, unique=True, related_name ='profile') 
job_title = models.CharField(max_length=128, blank=True, null=False, default="") 
    website = models.URLField(max_length=255, blank=True, null=True) 
    organisation = models.CharField(max_length=50, blank=True, null=True, default="") 
    phone_number = PhoneNumberField(blank=True, null=True) 

Django的版本是1.10,所以我用exclude。但它拋出一個error--

KeyError: "Key 'username' not found in 'UserForm'. Choices are: date_joined, email, first_name, groups, is_active, is_staff, is_superuser, last_login, last_name, password, user_permissions." 

我需要重寫註冊表格,因爲從管理員添加新用戶,當我不明白的領域前端註冊表格(在某些時候,我需要做的以及)。

任何幫助,高度讚賞。

+0

是在'UserProfile'模型'username'場?如果是,則爲'ProfileInline'設置'exclude'屬性,而不是'CustomUserAdmin'。 –

+0

'UserProfile'模型中沒有'username'字段。 –

+0

但是'username'字段在哪裏?請展示您的模型。 –

回答

2

關於這個問題的討論是here

簡述:

這是因爲股票UserAdmin定義了「用戶名」 是一個領域,你需要修改字段集的字段集,太。

例如:

class CustomUserAdmin(UserAdmin): 
    # ... 
    exclude = ('username',) 
    fieldsets = (
     ('Personal info', {'fields': ('full_name', 'email', 'password')}), 
     ('Important dates', {'fields': ('last_login', 'date_joined')}), 
     ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), 
    ) 
+0

輝煌。有效。接受答案。有什麼方法可以排序/訂購堆棧,如個人信息,重要日期等 –

相關問題