我正在开发一个新项目,我在面对用户模型时遇到了一些疑问。
我需要两种用户类型:
此模型将分享一些基本数据,如:
但每个用户类型也会有自定义字段。
我计划使用共享字段创建新模型配置文件,然后使用遗产工具2子模型 ProfileClient 和 ProfileShop 自定义字段。
我想知道这是否是最佳方法,或者有更好的方法来做到这一点。
答案 0 :(得分:1)
我猜一个用户可以同时兼顾Client和Shopper,不是吗?如果是这样,我建议创建一个个人资料模型,然后客户和购物者有一个外键链接到个人资料。在这种方法中,您不需要两次保存相同的配置文件信息。
答案 1 :(得分:1)
最佳方法是主观的,但为了支持更多的配置文件类型,而不是每次都添加Profile模型的子类,您可以在Profile模型上有一个JSONField,它包含Profile类型的任意数据。
class SharedProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
address = models.CharField(#..)
phone = models.CharField(#...) # or phone field, whatever
# optionally add a preferred profile, or current profile data , and then add properties on the model that get the attributes from the related Profile entry.
current_profile = models.ForeignKey('foo.models.Profile')
class Profile(models.Model):
shared_profile = models.ForeignKey(SharedProfile)
profile_type = models.CharField(choices=PROFILE_CHOICES)
profile_data = JSONField() # whatever JSONField package you are using