我的用户有电话联系列表 - [3121234567,2121234567,6601234567]
现在,我希望每个用户都能够存储尽可能多的LIST。每个列表必须在每个USER帐户下附加一个名称(或描述)。注意:LIST的数量取决于用户需求。例如:
学生 [3121234567,2121234567,6601234567]
分会会员 [8101234567,8151234567,8171234567]
现在,我如何将其存储在数据库中。
Django用户模型
class CustomUser(AbstractBaseUser):
username = models.CharField(max_length=254, unique=True)
first_name = models.CharField(max_length=24)
last_name = models.CharField(max_length=30)
phone = models.CharField(max_length=10)
email = models.EmailField(max_length=128)
street = models.CharField(max_length=128)
city = models.CharField(max_length=128)
state = models.CharField(max_length=2, choices=STATE_CHOICES, default=STATE)
zip_code = models.IntegerField(max_length=5, null=True, blank=True
USERNAME_FIELD = 'email'
REQUIRED_FIELD = ['username', 'first_name', 'last_name', 'phone', 'street', 'city', 'state']
objects = CustomUserManager()
编辑(添加): 我不打算创建Student或ClubMember模型。此名称用于标识python电话联系人列表。 PhoneAddress可以为一个用户标记(命名)为Student,但为另一个用户标记为“Conference Attendant”。每个用户都有不同的#列表。
PhoneAress PhoneAdress2 PhoneAdress3 [3121234567,2121234567,6601234567] [4121234567,3121234567,6601234567] [7121234567,8121234567,9601234567]
答案 0 :(得分:3)
Lemme猜测,你来自NoSQL背景,数据库是JSON格式的文档吗?
如果是这样,我很抱歉,在Django在PostgreSQL或MySQL等系统中使用的关系数据库中,他们称之为外键,这就是存储与特定字段相关的多个“列表”的方法。 / p>
如果您希望许多用户存储尽可能多的列表,您可能会看到类似的内容,粗略地说:
class myUserModel(models.Model):
# your arbitrary fields here
# then you do something like this:
class Student(models.Model):
user = models.ForeignKey(User)
class clubMember(models.Model):
user = models.ForeignKey(User)
通过上述设置,您可以添加与Student
类相关联的myUserModel
个对象,以及clubMember
但是,如果您希望专门使用PostgreSQL,作为您的后端(可能作为永久存储后端),您可能会发现使用Django对ArrayField的支持
哦,您可能需要扩展Django用户模型以轻松添加任何额外字段,除非您愿意继续使用自定义用户模型。
更多信息:
我希望以上帮助
答案 1 :(得分:0)
创建一些模型:
class Club(models.Model):
name = models.CharField(max_length=256,blank=True,null=True)
date_open = models.DateField()
class Institution(models.Model):
name = models.CharField(max_length=256,blank=True,null=True)
address = models.CharField(max_length=256,blank=True,null=True)
type = models.CharField(max_length=256,blank=True,null=True) #university, college
而不是使用
class CustomUser(AbstractBaseUser):
username = models.CharField(max_length=254, unique=True)
first_name = models.CharField(max_length=24)
last_name = models.CharField(max_length=30)
以OneOnOneField
的形式使用组合物 class UserProfile(models.Model):
user = models.OneOnOneField(User,blank=True,null=True)
club_member = models.ManyToManyField(Club,blank=True, null=True)
institutions = models.ManyToManyField(Institution,blank=True, null=True) # student in
一旦你有了这个,你将能够获得并添加尽可能多的机构和俱乐部:
user = User.objects.get(id=user_id)
club = Club.objects.get(id=club_id)
institution = Institution.objects.get(id=institution_id)
user.profile.clubs.add(club)
user.profile.institutions.add(institution)
所以要验证用户是否是俱乐部的成员
club = user.proile.clubs.get(id=club_id)
并确认用户是机构中的学生使用
institution = user.profile.institutions.get(id=institution_id)