我对 Django 有点陌生,到目前为止只是使用简单的数据库/模型配置。但我开始遇到一些限制。我需要为个人用户添加联系人列表,该列表仅存储姓名和电话号码的集合。 但除了将整个列表存储为字符串或将反序列化的 JSON 存储在单个字符或文本字段中(恶心)之外,我看不出用我已经创建的 UserProfile 模型可以做到这一点。
例如说我必须建模:
class UserProfile(models.Model):
user = models.OneToOneField(User)
#Persional Informaiton
height = models.CharField(max_length=24, blank=False,null=True)
weight = models.CharField(max_length=24, blank=False,null=True)
birthday = models.CharField(max_length=24, blank=False,null=True)
###THIS IS THE FIELD I NEED TO ADD!!
#Contacts
contact_list = models.SomeKindOfField() #could contain either an array or JSON??
class Meta:
managed = True
db_table = 'user_profiles'
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
还有其他方法可以做到这一点吗?我还考虑过为每个用户创建一个包含“姓名”和“电话”列的表,但开始怀疑这是否会成为管理的噩梦。
我对使用 models.ForeignKey(User) 做了一些研究,但从未完全掌握它的实现。
如果有任何指点,我们将不胜感激!谢谢。
最佳答案
如果您希望以标准关系数据库方式执行此操作,有几种选择。
- 将名称和电话号码作为属性的
Contact
模型以及外键添加到UserProfile
。这将允许您执行user_profile.contact_set.all()
。或者,如果您希望多个用户能够共享某些联系人,则可以使用 ManyToMany 来代替 FK。 - 如果您确实希望电话号码与用户或用户个人资料记录相关联,以便用户的联系人列表是其他用户,而不仅仅是各种电话号码和姓名,则可以添加
phone_number
属性到您的 UserProfile 模型。然后contact_list = models.ManyToManyField('self')
。请参阅文档:https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField.symmetrical
或者,如果您不想担心更多模型关系并且正在使用 postgres,则可以使用 hstore
,它允许您存储字典字段。请参阅https://github.com/djangonauts/django-hstore有关其工作原理的实际文档。
关于django - 扩展 Django 用户配置文件的新手,需要帮助为数据库中的每个用户创建联系人/电话号码列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238864/