私は練習用の追跡アプリケーションを作成しており、モデルを作成する最も効率的な方法については疑問に思っています。ほとんどの練習には繰り返し、セット、ウェイトがあります。しかし、そこに距離と時間を持つ実行されます。最初は、それぞれをキャプチャするために2つの異なるモデルを作成するつもりでしたが、次にそれを組み合わせる方が良いと考えました。今、私はよくわからない。Djangoモデルの適切な構築
以下、[OK]を、私の最初のパスである:ジョグは、ワークアウトのタイプであり、それは別の測定特性を持っているので、唯一のアウト分割取得しているため
LEVELS = (
(1, '1 - Hardly'),
(2, '2'),
(3, '3'),
(4, '4'),
(5, '5 - Average'),
(6, '6'),
(7, '7'),
(8, '8'),
(9, '9'),
(10, '10 - Very'),
class Jog(models.Model):
distance = models.DecimalField("Distance (Miles)", max_digits=4, decimal_places=2)
time = models.DecimalField("Time (Minutes)", max_digits=4, decimal_places=2)
intensity = models.IntegerField("Intensity", choices = LEVELS, default = 5)
date = models.DateTimeField("Date", blank=True, default=datetime.now)
notes = models.TextField("Notes", blank=True)
def __str__(self):
return "%s Miles in %s Minutes (Intensity of %s)" % (self.distance, self.time, self.intensity)
class Meta:
verbose_name = "Jog"
class Exercise_Type(models.Model):
name = models.CharField("Exercise Name", max_length=200, unique = True)
slug = models.SlugField(max_length=100, blank=True)
notes = models.TextField("Notes", blank=True)
def __str__(self):
return self.name
class Workout(models.Model):
exercise_type = models.ForeignKey(Exercise_Type, verbose_name="Exercise Type")
reps = models.IntegerField("Repetitions")
sets = models.DecimalField("Sets", max_digits=2, decimal_places=1)
weight = models.IntegerField("Weight", blank=True, null=True)
intensity = models.IntegerField("Intensity", choices = LEVELS, default = 5)
date = models.DateTimeField("Date", blank=True, default=datetime.now)
notes = models.TextField("Notes", blank=True)
これは、しかし愚かなように見えました。だから、もし私がこのようなことをすればどうなるだろうと思った。ユーザーエクササイズの種類を尋ねることによってそれらを抑制/ワークアウトのタイプに必要なフィールドを定義して、有効にします。
class Exercise_Type(models.Model):
name = models.CharField("Exercise Name", max_length=200, unique = True)
slug = models.SlugField(max_length=100, blank=True)
notes = models.TextField("Notes", blank=True)
distance = models.BooleanField("Use Distance Field?", default = False)
time = models.BooleanField("Use Time Field?", default = False)
reps = models.BooleanField("Use Reps Field", default = False)
sets = models.BooleanField("Use Sets Field?", default = False)
weight = models.BooleanField("Use Weight Field?", default = False)
def __str__(self):
return self.name
class Workout(models.Model):
exercise_type = models.ForeignKey(Exercise_Type, verbose_name="Exercise Type")
distance = models.DecimalField("Distance (Miles)", max_digits=4, decimal_places=2, blank = True, null=True)
time = models.DecimalField("Time (Minutes)", max_digits=4, decimal_places=2, blank = True, null=True)
reps = models.IntegerField("Repetitions", blank = True, null=True)
sets = models.DecimalField("Sets", max_digits=2, decimal_places=1, blank = True, null=True)
weight = models.IntegerField("Weight", blank=True, null=True)
intensity = models.IntegerField("Intensity", choices = LEVELS, default = 5)
date = models.DateTimeField("Date", blank=True, default=datetime.now)
notes = models.TextField("Notes", blank=True)
すべてのエクササイズが技術的に関わらず、それを必要とするかどうかのすべてのフィールドを持つことになりますので、これは資源の無駄のように思えますか否か。
次に、サブクラス化はどうですか?それは私があきらめて、自分よりも知識のある人にアピールすることを決めたときです。
このモデルを編成する最も良い方法は何ですか?
+1、測定の代わりにワークアウトの一部にするべきではありません。 –
あなたは両方の場所に置くことができますので、トレーニング(またはトレーニング)は複数の日付にまたがることができ、 。 –
しかし、通常は毎日のワークアウト、別々のワークアウトは別々にリストアップする必要があります。それ以外の場合はワークアウトローは1つだけです –