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')