Skip to main content
 首页 » 编程设计

python之Django模型设计——1张或多张表

2025年04月02日47oomusou

<分区>

我正在创建一个 Django 应用程序,用户可以在其中添加各种事件。某些事件具有仅适用于其自身的字段。

选项 1(多表)在某些方面似乎更简洁,但我想在 ListView 中显示所有事件,这使得选项 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)