我正在创建一个Django应用程序,用户可以在其中添加各种活动。某些活动的字段仅适用于自身。
选项1(多个表)在某些方面看起来更干净,但我想在列表视图中显示所有活动,这使得选项2更具吸引力。我还会有一个模型表单,用于添加特定活动。
其中一个选项明显优于其他选项还是优先选择?
选项1 :
class BaseActivity(models.Model):
user = models.ForeignKey(User)
date = models.DateField()
ave_heart_rate = models.FloatField(validators=[MinValueValidator(0)])
class Meta:
abstract = True
class TennisActivity(BaseActivity):
pass # no extra fields
class GolfActivity(BaseActivity):
score = models.IntegerField() #only applicable to golf
class JogActivity(BaseActivity):
distance = models.FloatField() #only applicable to jogging
或选项2 :
class BaseActivity(models.Model):
activity_choices = (('Tennis', 'tennis'),
('Golf','golf'),
('Jog','jog'))
user = models.ForeignKey(User)
activity_type = models.Charfield(choices=activity_choices)
date = models.DateField()
ave_heart_rate = models.FloatField(validators=[MinValueValidator(0)])
score = models.IntegerField(blank=True, null=True)
distance = models.FloatField(blank=True, null=True)
答案 0 :(得分:1)
我想这取决于你想要的扩展程度。如果您这样做,第一种方式是添加新活动而不必担心更新整个数据库。它会使输入和交易背后的逻辑略微变硬,但不会那么多。选项2意味着更难扩展,但如果你不担心这是一个更容易处理它的方法。
我个人会选择选项1。