我遇到了设计问题。对不起,如果没有在正确的类别中发布,我真的想知道在哪里提出这个问题: - /
我为朋友做了这个小型Zumba课程应用程序(从此时开始称为"管理员")。它是使用django和sqlite制作的本地Web应用程序来存储数据。起初,只提供了两类课程:常规课程和高级课程,因此该部分经过硬编码以简化逻辑。
现在,我正在努力使这个动态化并允许创建任意数量的类类型,而不必每次都修改代码和数据库模式。 例如,可能有: "青年" 14岁以下 "定期" "高级"
然后,管理员可以创建"电子贺卡"对于那些相应的课程。 例: 常规20:包括20个普通班级的通行证。 任何黄金级别的金牌30:30通行证。 等等 在app逻辑中,Regular pass持有者不能使用它来访问Gold类,因为该类的价格不同。因此,他必须通过金卡才能访问这些课程。现在,这就是我被困的地方。如何将此信息添加到成员帐户并能够使用它?我的问题是,每次使用穿孔卡时,其上的通行证数量必须减少一个。当会员购买新卡时,必须允许将新通行证添加到剩余金额。 它看起来很简单,只需在成员模型中添加一个字段,其中包含每个类类型的传递次数。(这就像以前一样)但是,因为我现在想让管理员创建新类型对于类,我永远不会知道需要多少个字段。(因为模型每个类类型需要一个字段)
然后我想使用一个持有字典的字段,[classtype_id,#_ passses] classtype id会告诉我它是黄金,常规还是其他任何类别,之后的数字是剩下的通行证。但是我搜索了一下,似乎你无法将数据存储在数据库中(遗憾的是)。
我应该将此信息存储到XML文件中吗?将数据库查询与文件操作组合时,它会减慢很多吗?
要探索的其他解决方案吗?
以下是可以提供帮助的模型:
Error: Got HTTP status code >= 400: 404 Not Found
答案 0 :(得分:1)
您必须将穿孔卡类型与穿孔卡分开
PunchcardType
已连接到班级类型,并且有关于课程充值次数和价格的信息
Punchcard
应该为用户提供fk,为PunchcardType
提供fk。它们应该保存当前用户可用于该类型的类数。每次用户参加课程时,您都会将相应的令牌数减少1,每次用户购买穿孔卡时,您都会将其增加cardType.classes
。
models.py应该是这样的:
class ClassType(models.Model):
name = models.CharField(max_length=64, blank=False, null=False)
default = models.BooleanField(default=False)
class MyUsers(models.Model):
username = models.CharField(max_length=64, unique=True, db_index=True)
firstname = models.CharField(max_length=64)
lastname = models.CharField(max_length=64)
fullname = models.CharField(max_length=128, db_index=True, editable=False)
email = models.CharField(max_length=64, db_index=True)
telephone = models.CharField(max_length=64, null=True, blank=True)
member_since = models.DateTimeField(editable=False)
last_seen = models.DateTimeField(editable=False, null=True)
notes = models.TextField(blank=True, null=True)
def save(self):
if not self.id:
self.member_since = datetime.date.today()
self.fullname = self.firstname + " " + self.lastname
super(MyUsers, self).save()
class Classes(models.Model):
name = models.CharField('Class Name', max_length=64, blank=False, null=False)
date = models.DateTimeField('Start Date & Time', blank=False, null=False)
classtype = models.ForeignKey(ClassType, blank=False, null=False, default=1)
status = models.IntegerField('Status', default=1) # 1 = open, 0 = closed
myusers = models.ManyToManyField(MyUsers, blank=True)
class PunchcardType(models.Model):
classes = models.IntegerField('Number of classes', blank=False, null=False)
price = models.DecimalField(decimal_places=2, max_digits=6, blank=False, null=False)
label = models.CharField('Name of the punchcard', max_length=64, db_index=True, blank=False, null=False)
classtype = models.ForeignKey(ClassType, blank=False, null=False)
class Punchcard(models.Model):
classes = models.IntegerField('Number of classes', blank=False, null=False)
cardtype = models.ForeignKey(PunchcardType, blank=False, null=False)
myuser = models.ForeignKey(MyUsers, blank=True)