Python 在Django数据库中正确定义关系
我正在开发一个健身游戏web应用程序。这个想法是,每个星期都有一定数量的任务,一个人必须在下一周公布之前完成。以下是我迄今为止应用程序的Python 在Django数据库中正确定义关系,python,sql,django,Python,Sql,Django,我正在开发一个健身游戏web应用程序。这个想法是,每个星期都有一定数量的任务,一个人必须在下一周公布之前完成。以下是我迄今为止应用程序的models.py模式: 从django.db导入模型 从django.contrib.auth.models导入用户 class WeekOne(models.Model): squats = models.PositiveIntegerField() lunges = models.PositiveIntegerField() ski
models.py
模式:
从django.db导入模型
从django.contrib.auth.models导入用户
class WeekOne(models.Model):
squats = models.PositiveIntegerField()
lunges = models.PositiveIntegerField()
skipStairs = models.BooleanField()
stairDaysCount = models.PositiveSmallIntegerField()
# Set to true if (squats == 1000), (lunges == 250),
# (skipStairs is True), and (stairDaysCount == 3)
weekOneComplete = models.BooleanField()
class UserProfile(models.Model):
user = models.OneToOneField(User)
weekOne = models.ForeignKey(WeekOne)
我在几点上迷失了方向。首先,很明显,我希望每个用户都能够跟踪自己的进度,而不是让任何其他用户看到它。制作weekOne
aForeignKey
是最好的方法吗?如果是这样,那么一旦定义了这种关系,访问每个用户的数据是如何工作的?例如,如果我想创建一个addShucks
函数,我会这样做吗:
user = UserProfile()
user.squats += 5
user = UserProfile.objects.get(user=request.user)
user.check_updates()
或者我需要用其他魔法才能进入蹲地
第二,每当用户对其进度进行更改(即,添加下蹲或弓箭步)时,我想检查所有字段是否都满足某个基准。如果有,我想将
weekOneComplete
设置为true。当用户单击一个按钮时,每个添加都会被一些javascript触发——但是我应该把检查/更新数据库的函数放在哪里呢 要访问第一周的字段,您需要执行以下操作:
user.weekOne.squats += 5
user.weekOne.save()
实际上,最好使用F函数并执行(或类似操作):
一般来说,最好在服务器端执行所有检查,而不要依赖于客户端(JS或其他)。例如,您公开一个url并检查所有POST参数是否为整数(例如转换为整数)要访问第一周的字段,您需要执行以下操作:
user.weekOne.squats += 5
user.weekOne.save()
实际上,最好使用F函数并执行(或类似操作):
一般来说,最好在服务器端执行所有检查,而不要依赖于客户端(JS或其他)。例如,您公开一个url并检查所有POST参数是否为整数(例如转换为整数)第二个问题:一种可能的(简单的)方法是通过ajax调用,因为您说您正在使用javascript 它应该指向一个url,该url本身指向一个视图,该视图将处理您在请求中发送的数据。大致如下(假设您正在使用POST请求): 这更像是伪代码,所以你明白了。您仍然需要在JS端编写ajax调用,该模型方法将添加到正确的练习和验证基准,并将用户保存到数据库中。例如:
def did_activity(self, excercise, amount):
if excercise == 'squats':
self.weekOne.squats += amount
...
if self.hit_benchmark():
self.weekOne.weekOneComplete = True
self.save()
此外,此示例假定用户已通过身份验证
祝你好运。关于你的第二个问题:一种可能的(简单的)方法是通过ajax调用,因为你说你正在使用javascript 它应该指向一个url,该url本身指向一个视图,该视图将处理您在请求中发送的数据。大致如下(假设您正在使用POST请求): 这更像是伪代码,所以你明白了。您仍然需要在JS端编写ajax调用,该模型方法将添加到正确的练习和验证基准,并将用户保存到数据库中。例如:
def did_activity(self, excercise, amount):
if excercise == 'squats':
self.weekOne.squats += amount
...
if self.hit_benchmark():
self.weekOne.weekOneComplete = True
self.save()
此外,此示例假定用户已通过身份验证
祝你好运。首先,显然我希望每个用户都能够跟踪自己的进度,而不是让任何其他用户看到它。 在模板中,您可以这样做
User: {{ user.username }}
squats: {{ user.userprofile.squats }}
lunges: {{ user.userprofile.lunges }}
Skip Stairs:
{% if user.userprofile.skipStairs %}
Yes
{% else %}
No
{% endif %}
Stair: {{ user.userprofile.stairDaysCount }}}
Week Completed:
{% if user.userprofile.weekOneComplete %}
Yes
{% else %}
In-Progress
{% endif %}
一旦定义了这种关系,如何访问每个用户的数据?例如,如果我想创建一个addShucks函数。
要访问用户数据
user = UserProfile(user=request.user)
user.weekOne.squats += 5
user.weekOne.save()
user.save()
其次,每当用户更改其进度时(即,添加下蹲或弓步),我想检查所有字段是否都满足某个基准。如果有,我想将weekOneComplete设置为true。
在UserProfile模型下,创建检查更新功能
class UserProfile(models.Model):
user = models.OneToOneField(User)
weekOne = models.ForeignKey(WeekOne)
def check_updates(self):
check = WeekOne.object.get(id=self.weekOne)
if check.skipStairs and \
check.squats == 1000 and \
check.lunges == 250 and \
check.stairDaysCount == 3:
check.weekOneComplete = True
check.save()
因此,每次更新该用户的数据时,只需调用如下方法:
user = UserProfile()
user.squats += 5
user = UserProfile.objects.get(user=request.user)
user.check_updates()
首先,显然我希望每个用户都能够跟踪自己的进度,而不是让任何其他用户看到。 在模板中,您可以这样做
User: {{ user.username }}
squats: {{ user.userprofile.squats }}
lunges: {{ user.userprofile.lunges }}
Skip Stairs:
{% if user.userprofile.skipStairs %}
Yes
{% else %}
No
{% endif %}
Stair: {{ user.userprofile.stairDaysCount }}}
Week Completed:
{% if user.userprofile.weekOneComplete %}
Yes
{% else %}
In-Progress
{% endif %}
一旦定义了这种关系,如何访问每个用户的数据?例如,如果我想创建一个addShucks函数。
要访问用户数据
user = UserProfile(user=request.user)
user.weekOne.squats += 5
user.weekOne.save()
user.save()
其次,每当用户更改其进度时(即,添加下蹲或弓步),我想检查所有字段是否都满足某个基准。如果有,我想将weekOneComplete设置为true。
在UserProfile模型下,创建检查更新功能
class UserProfile(models.Model):
user = models.OneToOneField(User)
weekOne = models.ForeignKey(WeekOne)
def check_updates(self):
check = WeekOne.object.get(id=self.weekOne)
if check.skipStairs and \
check.squats == 1000 and \
check.lunges == 250 and \
check.stairDaysCount == 3:
check.weekOneComplete = True
check.save()
因此,每次更新该用户的数据时,只需调用如下方法:
user = UserProfile()
user.squats += 5
user = UserProfile.objects.get(user=request.user)
user.check_updates()
问题的标题似乎与问题本身不一致:)哈哈,我从未问过一个问题问题的标题似乎与问题本身不一致:)哈哈,我从未问过一个问题