Python Django模型关系-健身应用程序
目前我的型号是:Python Django模型关系-健身应用程序,python,django-models,Python,Django Models,目前我的型号是: class Workout(models.Model): date = models.DateField() routine = models.ForeignKey('Routine') def __str__(self): return '%s' % self.date class Routine(models.Model): name = models.CharField(max_length=255) e
class Workout(models.Model):
date = models.DateField()
routine = models.ForeignKey('Routine')
def __str__(self):
return '%s' % self.date
class Routine(models.Model):
name = models.CharField(max_length=255)
exercises = models.ManyToManyField('Exercise')
def __str__(self):
return self.name
class Exercise(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
我希望用户能够创建由日期(训练)指定的新条目。他们还可以创建与日期相关的例程(例程),并填充他们也可以创建的不同练习(练习)
这是我搞不懂的部分
我希望用户在添加新运动时能够选择是力量运动还是有氧运动。力量练习的范围包括:套数、重复次数和重量。像carido一样的地方会有像长度和速度这样的领域
我不清楚如何将这两种练习与练习课联系起来 最常用的方法是创建一个,例如:
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Exercise(models.Model):
name = models.CharField(max_length=255)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
info = GenericForeignKey('content_type', 'object_id')
def __str__(self):
return self.name
class StrengthExercise(models.Model):
sets, reps, weight = (...)
class CardioExercise(models.Model):
length, speed = (...)
示例用法:
>>> from app_name.models import Exercise, CardioExercise
>>> exercise_info = CardioExercise.objects.create(length=600, speed=50)
>>> exercise = Exercise(name="cardio_exercise_1", info=exercise_info)
>>> exercise.save()
>>> exercise.info.length
600
>>> exercise.info.__class__.__name__
'CardioExercise'
OBS:确保您的安装的应用程序中有'django.contrib.contenttypes'
(默认情况下启用)