将列表存储在数据库

时间:2016-07-23 20:27:43

标签: django django-models

我的用户有电话联系列表 - [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]

2 个答案:

答案 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)