我已经发布了一个关于同一个项目的问题,所以希望这不会烦人,但我真的需要确保我知道我在用 ForeignKey 做什么,所以我不会 (a) 避免它或 (b)养成坏习惯。
我正在开发一个健身游戏,每个用户都有自己的帐户。游戏分为不同的“周”,每周都有不同的基准,用户必须满足这些基准才能进入下周。以下是我如何为周建模的示例:
class WeekOne(models.Model):
# Required benchmarks for given exercises
squatBenchmark = 1000
lungBenchmark = 250
stairDaysCountBenchmark = 3
squats = models.PositiveIntegerField()
lunges = models.PositiveIntegerField()
skipStairs = models.BooleanField()
stairDaysCount = models.PositiveSmallIntegerField()
# Set to true if benchmarks reached.
weekOneComplete = models.BooleanField()
现在,我希望每个用户都有自己的深蹲、弓步、skipStairs 等字段,所以我认为这样做的方法是ForeignKey
在 UserProfile(用户的扩展)模型中创建一个字段,如下所示:
class UserProfile(models.Model):
user = models.OneToOneField(User)
weekOne = models.ForeignKey(WeekOne)
def checkUpdates(self):
if self.WeekOne.squats >= WeekOne.squatBenchmark and \
self.WeekOne.lunges >= WeekOne.lungBenchmark and \
self.WeekOne.stairsDayCount >= WeekOne.stairDaysCountBenchmark and \
self.WeekOne.skipStairs:
self.WeekOne.weekOneComplete = True
self.save()
self.WeekOne.save()
这似乎不起作用。我创建了一个视图,在其中将此模型的上下文传递给模板,如下所示:
def workout1(request):
user = UserProfile(user=request.user)
template = "workout1.html"
context = {'user': user}
return render(request, template, context)
但是当我尝试user.weekOne.squats
在我的模板中显示时,我得到了一个 DoesNotExist 错误。此外,我希望能够显示WeekOne
像 squatBenchmark 这样的“静态”变量,但WeekOne.squats
在我的 Django 模板中也无法识别。谁能给我任何关于我是否正确使用 ForeignKeys 以及在我的视图和模板中尝试使用它们时哪里出错的见解?