Я использую встроенный Django Администратор, у меня есть два типа пользователей, необходимо вызывать оба с использованием разных URL-адресов, т.е. http://127.0.0.1:8000/admin/staff
& http://127.0.0.1:8000/admin/customer
необходимо разделить пользовательскую модель на две отдельные модели Staff
& Customer
. Модель Staff
будет использоваться для пользователей с правами администратора, а модель Customer
будет использоваться для внешних пользователей.
Примечание. Я сохранил имена таблиц БД, такие же, как по умолчанию auth_user
, auth_group
.. .et c
Я создал приложение с именем users
в проекте
До сих пор я пробовал следующие вещи:
models.py
from django.contrib.auth.models import (
AbstractUser, Permission, Group, GroupManager)
from django.db import models
from django.utils.translation import gettext_lazy as _
class Staff(AbstractUser):
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
verbose_name = _('staff')
verbose_name_plural = _('staffs')
db_table = 'auth_user'
class Customer(AbstractUser):
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
verbose_name = _('customer')
verbose_name_plural = _('customers')
db_table = 'auth_user'
admin.py
from django.contrib import admin
from django.contrib.auth.models import Group, User, Permission
from django.contrib.auth.admin import GroupAdmin, UserAdmin
from django.utils.translation import ugettext_lazy as _
from django import forms
from django.forms import ModelForm, Select
from users.models import Staff, Customer
class MyGroupAdminForm(forms.ModelForm):
class Meta:
model = Group
fields = ('name', 'permissions')
permissions = forms.ModelMultipleChoiceField(
Permission.objects.exclude(content_type__app_label__in=[
'auth', 'admin', 'sessions', 'users', 'contenttypes']),
widget=admin.widgets.FilteredSelectMultiple(_('permissions'), False))
class MyUserAdminForm(forms.ModelForm):
model = User
groups = forms.ModelChoiceField(Group.objects, label='Role')
class Meta:
model = User
fields = '__all__'
class CustomUserAdmin(UserAdmin):
form = MyUserAdminForm
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
'groups',)}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
class CustomGroupAdmin(GroupAdmin):
form = MyGroupAdminForm
# admin.site.unregister(User)
admin.site.unregister(Group)
# admin.site.register(User, CustomUserAdmin)
# admin.site.register(Group, CustomGroupAdmin)
admin.site.register(Staff, CustomUserAdmin)
admin.site.register(Group, CustomGroupAdmin)
settings.py
AUTH_USER_MODEL = "users.Staff"
Теперь, когда я пытаюсь сменить любого штатного пользователя, я получаю следующую ошибку:
OperationalError at /admin/users/staff/1/change/
(1054, "Unknown column 'auth_user_groups.staff_id' in 'where clause'")
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/users/staff/1/change/
Django Version: 2.2.8
Exception Type: OperationalError
Exception Value:
(1054, "Unknown column 'auth_user_groups.staff_id' in 'where clause'")
Exception Location: C:\Users\kalim.ullah\Envs\Cert\lib\site-packages\MySQLdb\connections.py in query, line 239
Python Executable: C:\Users\kalim.ullah\Envs\Cert\Scripts\python.exe
Python Version: 3.8.0
Python Path:
['D:\\projects\\certdashboard',
'C:\\Users\\kalim.ullah\\Envs\\Cert\\Scripts\\python38.zip',
'C:\\Users\\kalim.ullah\\Envs\\Cert\\DLLs',
'C:\\Users\\kalim.ullah\\Envs\\Cert\\lib',
'C:\\Users\\kalim.ullah\\Envs\\Cert\\Scripts',
'c:\\users\\kalim.ullah\\appdata\\local\\programs\\python\\python38\\Lib',
'c:\\users\\kalim.ullah\\appdata\\local\\programs\\python\\python38\\DLLs',
'C:\\Users\\kalim.ullah\\Envs\\Cert',
'C:\\Users\\kalim.ullah\\Envs\\Cert\\lib\\site-packages']
Server time: Fri, 10 Jan 2020 13:00:41 +0000
Пожалуйста, укажите мне правильный способ сделать это
Спасибо