我正在构建一个应用程序,通过多对多关系将一个模型链接到另一个模型。以下是一个示例:我有一个运动训练课程,由多个练习组成,例如:
- 冲刺
- 罚款
- 罚款
- Sprint
当我将我的exercise添加到会话中时,它们会添加在前面(有角度(,但当我刷新页面时,会话对象中只保留每个exercise的一个副本。
以下是型号:
class Exercice(models.Model):
name = models.CharField(max_length=255)
class Session(models.Model):
sequences = models.ManyToManyField(Exercice, null=True, blank=True)
你知道如何在一次训练中多次进行相同的锻炼吗?
这是因为m2m只包含id,而不是您想要它们的次数和顺序。
这个问题似乎更多地与您的数据库结构有关。
似乎您需要一个新表来存储这些信息。
class Exercice(models.Model):
name = models.CharField(max_length=255)
class Session(models.Model):
exercices = models.ManyToManyField(Exercice, null=True, blank=True)
class Sequence(models.Model):
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE)
session = models.ForeignKey(Session, on_delete=models.CASCADE)
#any extra info there
repetitions = models.PositiveSmallIntegerField(blank=True, null=True) #how many time each?
created_at = models.DateTimeField(auto_now_add=True) # used to generate the sequence of exercices
然后你可以循环浏览这个表,得到你想要的东西。
因此,在您的后端,当您创建会话时,您还应该为其中的每个练习创建序列条目
您现在可以通过查看以下内容访问序列:
session = Session.objects.get(id=1#eg)
sequence = session.sequence_set.order_by('created_at')
您正试图创建一种实际上没有映射的历史表类型。您可以添加一个中间件模型,如下所示。
class ExerciseHistory(models.Model):
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE)
session = models.ForeignKey(Session, on_delete=models.CASCADE)
created_date = models.DateTimeField(auto_now_add=True)