Django模型:具有无限组字段重复的表单

时间:2016-09-11 21:51:24

标签: python django

这些天我正在研究django,我需要你的帮助才能找到解决这个问题的方法。

假设我有一个名为“活动”的实体,它由以下组成:

- title: just a char field
- ActivityYears: a couple of start-end years that can be repeated multiple times

ActivityYears由:

组成
- start year
- end year 

这就是我的数据库应该是这样的:

activity_table
-ID
-title

activity_years_table
-year start
-year end
-activity ID

这就是前端的看法

Activity title 1
2001 - 2003
2005 - 2006
2007 - 2010

Activity title 2
2011 - 2013
2015 - 2016

and so on

我敢说Activity和ActivityYears是模型,但我无法以正确的方式连接它们。当我添加一个活动项目时,我应该能够添加尽可能多的开始年份,但是如何?

提前完成

1 个答案:

答案 0 :(得分:3)

您可能希望使用两个具有Foreign Key关系的独立模型。例如:

class Activity(Model):
    id = AutoField(editable=False, primary_key=True, unique=True)
    title = CharField(default="Activity")

class ActivityYear(Model):
    id = AutoField(editable=False, primary_key=True, unique=True)
    year_start = IntegerField(default=1900)
    year_end = IntegerField(default=1999)

    activity_id = ForeignKey(Activity)

通过此模型设计,我们可以定义每个ActivityYear都有一个成员activity_id,该成员指向数据库中有效id行的Activity字段。有了这些信息,您就可以使用相应的ActivityYear对象的Activity成员从数据库中选择id个对象:

SELECT * FROM activity_years WHERE activity_id = 1

或在Django中:

activity_years = Activity.objects.filter(activity_id=1)

为了添加映射到特定ActivityYear对象的Activity个对象,您可以使用以下内容:

ActivityYear.objects.create({
    'year_start': 1990,
    'year_end': 1999,
    'activity_id': 1,
})

如果这回答了你的问题,请告诉我。