Djnago как разделить пользователей и заказчиков

В моем проекте (небольшой интернет-магазин) мне нужно разделить регистрацию для пользователей и клиентов.

Итак, информация, которую я нашел, когда кто-то регистрируется в django, то его аккаунт хранится в одной таблице, в этой таблице я могу видеть пользователя admin, сотрудников и другие зарегистрированные аккаунты, и я могу просмотреть их все в админке на странице Users. Но я не хочу складывать все аккаунты в одну "корзину". Мне нужно разделить их по разным таблицам.

Например, суперпользователь может создать в админке нового пользователя (контент-менеджера) и предоставить ему доступ/разрешение на управление админкой (создание продукта и т.д.) - этот пользователь и суперпользователь будут находиться на странице User по умолчанию. На странице Customers будут отображаться только те пользователи, которые зарегистрировались, например, через страницу https://mysite/account/register, после регистрации аккаунта этого клиента я могу видеть его на странице Customers в админке, но не на странице Users. И этот клиент может войти в свой аккаунт, например, через https://mysite/account/login

Возможно ли это?

Как сказал Джей, каждый зарегистрированный в базе данных все равно является пользователем, независимо от его роли (администратор, суперпользователь, клиент). Вы можете создать модель Profile, в которой каждый будет иметь свою информацию, такую как телефон, местоположение и т.д., а также добавить еще одно поле, уточняющее его property.

PACKAGES = [
    ('customer', 'Customer'),
    ('support', 'Support'),
    ('admin', 'Admin'),
]

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    image = models.ImageField(default='user_avatar.png', upload_to='...')
    last_visit = models.DateField(default=timezone.now, blank=True)
    location = models.CharField(max_length=254, null=True, blank=True)
    contact_phone = models.CharField(max_length=15)
    user_role = models.CharField(default="customer", choices=PACKAGES, max_length=20)
  

Тогда все, что вам нужно сделать, это отредактировать ваш admin.py, чтобы реализовать там параметр поиска:

class ProfileAdmin(admin.ModelAdmin):
    list_filter=('user_role',)

admin.site.register(Profile, ProfileAdmin)

Сделав это, вы получите filter_list в правом углу вашей admin страницы, но это только для страницы администратора.

Если вы хотите получить доступ к различным roles в ваших представлениях или шаблонах, вы сделаете это, получив нужные вам user_role:

customers = Profile.objects.filter(user_role='customer')
Вернуться на верх