【发布时间】:2020-08-17 01:37:51
【问题描述】:
我正在使用 Django 创建一个 WebApp 作为个人项目。这个应用程序跟踪远足挑战,并使用 API 从天气数据库中获取天气。我目前的问题是创建一个很好的设计并且在未来可以扩展的数据库结构。
目前,我有两个表。 (Django 模型)
class Mountain(models.Model):
mnt_name = models.CharField(max_length=100)
latitude = models.FloatField()
longitude = models.FloatField()
elevation = models.IntegerField(default=0)
distance = models.IntegerField(default=0)
users_completed = models.ManyToManyField(User)
# Commented from code to prevent issues
# date_done = models.DateTimeField(blank=True, null=True, default=None)
def __str__(self):
return self.mnt_name
class Challenge(models.Model):
challenge_name = models.CharField(max_length=101)
mountains = models.ManyToManyField(Mountain)
def __str__(self):
return self.challenge_name
我有一些我正在寻找的功能。我可以遍历users_completed 的列表并将它们与当前登录的用户进行比较,如果用户在列表中,则更新完成状态。但这不是一个好的解决方案,因为我无法完成用户特定的日期以及其他原因。
凭直觉,我认为解决此问题的最佳方法是为每个用户个人资料添加每个挑战的副本,以便用户可以获得特定于用户的数据,例如完成状态和完成日期。但我不确定我将如何去做,或者是否有可能。
关于我应该如何重新排列我的模型的任何建议,以便我可以获得用户特定的数据,例如山是否已完成,以及完成日期等。
非常感谢所有帮助。谢谢。
【问题讨论】:
-
用户完成挑战还是用户完成山脉?挑战有多座山吗?
-
@Mike67 用户完成了山脉。当所有山脉都完成后,挑战将被视为完成。挑战确实有多座山。
-
使用中间模型
-
@FranciscoCouzo 那么将用户特定的字段分解到单独的模型中并将用户添加到模型中?
标签: python sql django database