我正在Django构建一个应用程序,允许用户在他们的个人资料中添加项目,例如以前的工作经验。我遇到的问题是不同的用户有不同的经验。我目前的方法是建立一个类似于:
的模型class MyModel(models.Model):
owner = models.ForeignKey(User, related_name='modelowner', on_delete=models.CASCADE)
experience1_company = models.TextField(null=True, blank=True)
experience2_company = models.TextField(null=True, blank=True)
experience3_company = models.TextField(null=True, blank=True)
...
experience10_company = models.TextField(null=True, blank=True)
experience1_title = models.TextField(null=True, blank=True)
experience2_title = models.TextField(null=True, blank=True)
experience3_title = models.TextField(null=True, blank=True)
...
experience10_title = models.TextField(null=True, blank=True)
在我目前的模型中,用户最多可以输入10个以前的角色,这些角色覆盖了大约95%以上的用户。然而,这显然存在用户输入的每个先前体验具有许多其他五个属性(开始日期,结束日期,标题,描述,位置)的问题。这意味着该模型最终会有60个属性......如果我需要添加新内容,我必须添加10次。
问题:有没有办法为拥有超过X个经验的用户动态构建新的模型属性,或者最好的做法是在模型中明确定义每个属性并且只是实际截止(例如,你可以只输入10)?
答案 0 :(得分:2)
您必须更改模型才能代表以下体验:
Insert INTO tablename
select substring_index('1|2|ABC','|',1),
substring_index(substring_index('1|2|ABC','|',2),'|',-1),
substring_index('1|2|ABC','|',-1);
现在,您可以为每个用户创建无限制的class Experience(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
company = models.TextField(null=True, blank=True)
title = models.TextField(null=True, blank=True)
# and as much other fields as you like:
start_date = models.DateField()
end_date = models.DateField()
description = models.TextField(null=True, blank=True)
location = models.TextField(null=True, blank=True)
个实例,并使用以下命令获取它们
Experience
或
user = User.objects.get(username='bob')
Experience.objects.filter(owner=user)
有关此主题的文档位于Making queries - following relationships "backward"
答案 1 :(得分:0)
您需要一个模型来存储工作体验信息,例如(job_title,company_name,start_date,end_date,职责),并将此工作体验模型链接到用户配置文件。如下所示:
class WorkExperience(models.Model):
person = models.ForeignKey(User, blank=True, null=True)
job_title = models.CharField(max_length=125)
company_name = models.CharField(max_length=125)
start_date = models.DateField()
end_date = models.DateField()
duties_description = models.CharField(max_length=125)
这样,您的应用程序可以容纳任意数量的每个用户WorkExperience