Django 有没有办法将同一对象多次添加到多对多字段中
我正在构建一个应用程序,通过多对多关系将一个模型链接到另一个模型。以下是一个例子: 我有一个运动训练课程,由多个练习组成,例如:Django 有没有办法将同一对象多次添加到多对多字段中,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我正在构建一个应用程序,通过多对多关系将一个模型链接到另一个模型。以下是一个例子: 我有一个运动训练课程,由多个练习组成,例如: 冲刺 惩罚 惩罚 冲刺 当我将练习添加到会话时,它们会添加在前面(角度),但当我刷新页面时,会话对象中只保留每个练习的一个副本 以下是模型: class Exercice(models.Model): name = models.CharField(max_length=255) class Session(models.Model): sequen
class Exercice(models.Model):
name = models.CharField(max_length=255)
class Session(models.Model):
sequences = models.ManyToManyField(Exercice, null=True, blank=True)
您知道如何在一个会话中多次进行相同的练习吗?您正在尝试创建一种实际上不映射的历史记录表。您可以在下面添加一个中间件模型
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)
这是因为m2m只包含ID,而不是您需要多少次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')
如果我需要添加一个精确的顺序,有没有办法说第一个练习是一个冲刺,第三个练习也是一个冲刺?你需要在你的训练中为每个练习创建一个新的练习项。然后按顺序创建它们,这样当您检索它们时,您就可以按处创建的对它们进行排序,在测试之后您就可以获得会话序列,它就像我希望的那样完美地工作!谢谢!