我有一个简单的待办事项列表,其中包含可由用户订购的活动。我使用模型 List ,模型活动的多对多字段。
现在我需要一种方法来存储列表中活动的用户定义顺序。我应该在List模型中使用额外的字段来存储我的活动主键的顺序,如下所示:
class List(models.Model):
activities = models.ManyToManyField(Activity)
order = models.CommaSeperatedIntegerField(max_length=250)
或者我应该使用 Activity 模型中的解决方案,如下所述: https://djangosnippets.org/snippets/998/
哪种方法可以被视为最佳做法?
答案 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