2017-08-10 51 views
0

フロントエンドユーザーサインアップフォームには、loginに電子メールを使用しているのでusernameフィールドはありません。次に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'フィールドですか? yesの場合、 'CustomUserAdmin'ではなく' ProfileInline'に 'exclude'プロパティを設定します。 –

+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

ブリリアント。出来た。回答が受け入れられました。個人情報、重要な日付などのスタックを並べ替え/並べ替えることができる方法はありますか? –

関連する問題