gpt4 book ai didi

Django - 多个用户配置文件

转载 作者:行者123 更新时间:2023-12-03 10:41:07 25 4
gpt4 key购买 nike

最初,我像这样开始我的 UserProfile:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
user = models.OneToOneField(User)
verified = models.BooleanField()
mobile = models.CharField(max_length=32)

def __unicode__(self):
return self.user.email

AUTH_PROFILE_MODULE = 'accounts.UserProfile' 配合得很好设置在 settings.py .

但是,我的网站中有两种不同类型的用户,个人和公司,每个用户都有自己独特的属性。例如,我希望我的个人用户只有一个用户,因此有 user = models.OneToOneField(User) ,对于企业,我希望他们有多个用户与同一个配置文件相关,所以我会有 user = models.ForeignKey(User)反而。

所以我想把模型分成两个不同的模型, IndivProfileCorpProfile , 都继承自 UserProfile同时将特定于模型的属性移动到相关的子模型中。对我来说似乎是个好主意并且可能会起作用,但是我无法指定 AUTH_PROFILE_MODULE这种方式,因为我有两个不同的用户不同的用户配置文件。

我也想过反过来做,有 UserProfile从多个类(模型)继承,如下所示:
class UserProfile(IndivProfile, CorpProfile):
# some field

def __unicode__(self):
return self.user.email

这样我会设置 AUTH_PROFILE_MODULE = 'accounts.UserProfile'并解决它的问题。但这看起来行不通,因为 python 中的继承是从左到右工作的,而 IndivProfile 中的所有变量都是如此。将占主导地位。

当然,我总是可以拥有一个带有 IndivProfile 的模型和 CorpProfile变量都混合在一起,然后我会在必要时使用所需的变量。但这对我来说看起来并不干净,我宁愿将它们隔离并在适当的地方使用适当的模型。

的任何建议清洁这样做的方式?

最佳答案

我已经这样做了。

PROFILE_TYPES = (
(u'INDV', 'Individual'),
(u'CORP', 'Corporate'),
)

# used just to define the relation between User and Profile
class UserProfile(models.Model):
user = models.ForeignKey(User)
profile = models.ForeignKey('Profile')
type = models.CharField(choices=PROFILE_TYPES, max_length=16)

# common fields reside here
class Profile(models.Model):
verified = models.BooleanField(default=False)

我最终使用了一个中间表来反射(reflect)两个抽象模型之间的关系, User已经在 Django 中定义了,我的 Profile模型。如果有不常见的属性,我将创建一个新模型并将其关联到 Profile .

关于Django - 多个用户配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com