Django模型:具有有序活动的List模型

时间:2013-12-03 15:50:00

标签: python django database-design

我有一个简单的待办事项列表,其中包含可由用户订购的活动。我使用模型 List ,模型活动的多对多字段。

现在我需要一种方法来存储列表中活动的用户定义顺序。我应该在List模型中使用额外的字段来存储我的活动主键的顺序,如下所示:

class List(models.Model):
    activities = models.ManyToManyField(Activity)
    order = models.CommaSeperatedIntegerField(max_length=250)

或者我应该使用 Activity 模型中的解决方案,如下所述: https://djangosnippets.org/snippets/998/

哪种方法可以被视为最佳做法?

1 个答案:

答案 0 :(得分:0)

您可以创建自己的ManyToMany模型来定义额外字段order

https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

类似的东西:

class ActivityList(models.Model):
   activity = models.ForeignKey(Activity)
   list = models.ForeignKey(List)
   order = models.IntegerField()

class List(models.Model)
  activities = models.ManyToManyField(Activity, through='ActivityList')

现在我需要一种在列表中存储用户定义的活动排序的方法。

指定和order字段可让您为每项活动提供订单。

指定逗号分隔字符串,100%不是可行的方法,实际上它是关系数据库中最大的反模式之一,Is storing a delimited list in a database column really that bad?

使用through模型可让您在向用户展示待办事项列表时查询订单

for activity in your_list.activities.all().order_by('order'):
   # display activity to user