首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >健身会员健身管理的django数据库结构

健身会员健身管理的django数据库结构
EN

Stack Overflow用户
提问于 2013-09-29 15:57:39
回答 1查看 1.3K关注 0票数 0

我想为一个小型健身房开发一个django管理应用程序。

我们有一份会员名单

每个成员可以有一张或更多张卡。

每张卡可以有一个或更多的锻炼。

每次锻炼可以有一个或更多的运动。

每个练习都有以下字段:

练习名称(可以从练习名称列表中选择)、序列号(可以从序列列表中选择)、重复号(可以从重复列表中选择)、执行模式(可以从执行列表中选择)、休息时间(可以从执行列表中选择)。

下面是我可能实现的models.py:

代码语言:javascript
复制
from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Member(models.Model):

    #Member data
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)

    #Contact
    email = models.EmailField(blank=True, null=True)
    phone = models.CharField(max_length=50, blank=True, null=True)

    #Body
    birthday = models.DateField(blank=True, null=True)
    height = models.IntegerField(blank=True, null=True)
    weigth = models.IntegerField(blank=True, null=True)

    #Trainer notes
    trainer = models.ForeignKey(User, limit_choices_to={'is_staff': True, 'is_superuser': False}, blank=True, null=True)
    note = models.CharField(max_length=160, blank=True, null=True)

    #Registration status
    registration = models.DateField(auto_now_add=True)
    expiration = models.DateField(blank=True, null=True)


    card = models.OneToOneField('Card')


    def __str__(self):
        return u'%s %s' % (self.surname, self.name)




class Card(models.Model):

    number = models.IntegerField()

    #Card status
    card_creation = models.DateField(auto_now_add=True)
    card_expiration = models.DateField(blank=True, null=True)

    workout = models.ForeignKey('Workout')

    def __str__(self):
        return u'%s' % (self.number)





class Workout(models.Model):

    number = models.IntegerField()
    exercise = models.ForeignKey('Exercise')

    def __str__(self):
        return u'%s' % (self.number)    




class Exercise(models.Model):

    name = models.ForeignKey('Name')
    series = models.ForeignKey('Serie')
    repetitions = models.ForeignKey('Repetition')
    executions = models.ForeignKey('Execution', blank=True, null=True)
    rest = models.ForeignKey('Rest')

    def __str__(self):
        return u'%s' % (self.name) 





class Name(models.Model):

    name = models.CharField(max_length=50)

    def __str__(self):
        return u'%s' % (self.name) 





class Serie(models.Model):

    serie = models.CharField(max_length=50)

    def __str__(self):
        return u'%s' % (self.serie)     





class Repetition(models.Model):

    repetition = models.IntegerField()

    def __str__(self):
        return u'%s' % (self.repetition) 




class Execution(models.Model):

    execution = models.CharField(max_length=50)

    def __str__(self):
        return u'%s' % (self.execution)     



class Rest(models.Model):

    rest = models.IntegerField()

    def __str__(self):
        return u'%s' % (self.rest) 

我不确定这是否像描述的那样有效。你能建议一个可能的实施方案吗?最后,我只想有一个关于所有数据的视图:成员,卡片,锻炼.因此,工作人员用户可以修改用户和链接的锻炼卡)它是可以用admin.py还是我需要一个自定义管理?

EN

回答 1

Stack Overflow用户

发布于 2013-09-29 19:58:48

这看起来很不错,就像Samidh在评论中说的那样,你应该用sqlite打开一个dev服务器,然后在它周围玩一玩。看看什么起作用了什么不起作用。这是你能做的最好的事了。

然而,既然你问了,这里有几个注意事项要记住:

  • "each member could have 1 or more card" -那为什么你在记忆中的卡片字段是一个OneToOne?用ForeignKey (本质上是ManyToOne)字段将其链接到会员难道不更有意义吗?
  • "each card could have 1 or more workout" -如果你有一个从卡片到锻炼的ForeignKey,那么你实际上是在做与你描述的相反的事情,你正在为一个(锻炼)做很多(卡片)。但也许这就是你想要的?或者你真的想让它成为ManyToManyField?因为每次锻炼都有不同的卡片,反之亦然。我真的不知道什么是最适合这里的,但这是你可能需要考虑的事情。
  • "each workout could have 1 or more exercise"与前面的点相同。
  • 我看到你练习中的每一个字段都是ForeingKey。现在再说一遍,这不是一个糟糕的选择或想法,但您应该考虑这需要什么,并考虑用一个ManyToMany替换它,或者,如果其中一个字段是一个静态列表(也就是说,您有一个有限的可用名称列表,您知道这些名称在未来不会有很大的变化),那么您可以使用带有选项choices=的CharField。

我不能确切地告诉你“这是坏的”,“这是好的”,这是一个非常项目-主观的事情,但我希望我的几个提示在某种程度上帮助了你。最后,这一切都归结为你所需要的。如果您感到困惑,我建议阅读一下SQL中的表关系以及它们是如何工作的。

Django非常适合实现复杂的关系,但是使用它之前不学习一点SQL可能会让人感到困惑,因为您只看到最终结果,而且很少查看表本身。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19080063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档