Django模型设计 - 1个或多个表

时间:2016-04-13 12:31:06

标签: python django

我正在创建一个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)

1 个答案:

答案 0 :(得分:1)

我想这取决于你想要的扩展程度。如果您这样做,第一种方式是添加新活动而不必担心更新整个数据库。它会使输入和交易背后的逻辑略微变硬,但不会那么多。选项2意味着更难扩展,但如果你不担心这是一个更容易处理它的方法。

我个人会选择选项1。