가 여기에가는 많은, 그래서 내 대답을 조금씩거야.
이는 설정에 따라 다릅니다. 일반적으로 관리자는 "직원"만 사용할 수 있어야합니다. 즉, 귀하의 조직에 고용되어 있거나 직접 관련되어있는 사람들. 실제로 관리자에게 로그인하려면 사용자는 is_staff=True
이어야합니다. 모든 사용자가 조직에 속한 경우 (결과적으로 "신뢰할 수있는 사용자"로 간주 될 수 있음) 그렇다면 모든 사용자가 관리자에게 액세스 할 수 있도록 허용하는 것이 좋습니다. 그렇지 않으면 보안 위험에 노출되는 것처럼 좋은 생각이 아닙니다.
class UserProfileInlineAdmin(admin.StackedInline):
model = UserProfile
max_num = 1
can_delete = False
class UserAdmin(admin.ModelAdmin):
inlines = [UserProfileInlineAdmin]
당신이 인라인 관리자에서 얻을보기는하지만, (이 경우 User
의)를 기본 폼에서 명확하게 구별된다.내 뜻을 알기 위해 그것을 시험해 볼 수 있습니다. 그것은 끔찍한 것이 아니지만, 여전히 형태의 눈에 띄는 휴식입니다. 이전에 양식에 필드를 추가하는 방법에 대해 언급 한 이유는 원하는 경우 영리한 오분 향이있는 양식 하나처럼 보이게 만들 수 있기 때문입니다. 단순한 예를 들어,하지만 아이디어는 양식에 수동으로 필드 (들)을 추가 한 다음 기본 개체가 저장 편집중인 경우 실제로 수동으로 다른 개체를 업데이트하는 데 사용할 것입니다
class UserAdminForm(forms.ModelForm):
class Meta:
model = User
is_developer = forms.BooleanField(default=False)
def save(self, commit=True):
user = super(UserAdminForm, self).save(commit=commit)
if user.pk:
profile = user.get_profile()
profile.is_developer = self.cleaned_data.get('is_developer')
profile.save()
.
의주의 사항은 여기 User
상대하고 있기 때문에, 훨씬 더 끈적 사항이있다, 지금 User
관련. 첫째, User
은 이미 UserAdmin
과 그 자체의 양식을 가지고 있습니다 (예 : 복수형). 새로운 기능을 추가하려면 기존 Django 기능을 프로세스에 유지해야합니다.
from django.contrib.auth.admin import UserAdmin
form django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class CustomUserCreationForm(UserCreationForm):
# do stuff
class CustomUserChangeForm(UserChangeForm):
# do stuff
class CustomUserAdmin(UserAdmin):
form = CustomUserChangeForm
add_form = CustomUserCreationForm
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
또한 UserAdmin
에는 고유 한 필드 세트 집합이 정의되어 있습니다. 기본값은 다음과 같습니다 당신은 필드 나 필드를 추가하려면
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
(_('Groups'), {'fields': ('groups',)}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2')}
),
)
, 당신은 당신이 원하는 위치에 추가하여 필드 두 속성을 재정의해야합니다.
매우 자세한 답장을 보내 주셔서 감사합니다. 당신이 설명하는 방법을 사용하여 작동하는 userprofile 필드가 있는데, 그것은 매우 잘 작동합니다. 언어를 너무 많이 통제 할 수 있게끔 때때로 약간 당황 스럽습니다. 실제로 익숙하지 않은 약간의 손이 닿지 만 분명히 이점을 볼 수 있습니다. 다시 감사합니다! :) – Xenocide
메모 : 2 행에 오타가 있어야하며 '형식이 아님'이어야합니다. – Tom