django Djnago如何分割用户和客户

9udxz4iz  于 2022-12-01  发布在  Go
关注(0)|答案(1)|浏览(145)

在我的项目(小网上商店)我需要分裂注册的用户和客户。
所以当有人在django注册时,我发现他的帐户信息存储在一个表中,在这个表中我可以看到管理员用户和员工以及另一个注册的帐户,我可以在用户页面的管理员中查看它们。但我不想把所有帐户放在一个“篮子”中。我需要把它们从不同的表中分开。
例如,超级用户可以在管理区域中创建一个新用户(内容管理员),并向其提供管理管理区域(创建产品等)的访问/权限-此用户和超级用户将位于默认的“用户”页面上。在“客户”页面上,将仅显示通过https://mysite/account/register页面等方式注册的用户,注册后,我可以在管理区域的“客户”页面中看到此客户帐户,但无法在“用户”页面中看到。此客户可以通过https://mysite/account/login等方式登录其帐户
这可能吗?

sg2wtvxw

sg2wtvxw1#

正如Jay所说,在数据库中注册的每个人仍然是一个用户,无论他们的角色是什么(管理员、超级用户、客户)。您可以做的是创建一个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')

相关问题