gpt4 book ai didi

python - 使用函数修改数据表 UserProfile 中的值

转载 作者:行者123 更新时间:2023-12-01 01:21:59 27 4
gpt4 key购买 nike

我正在尝试运行 .save() 来更改用户模型字段的值。

这是我的代码:

View .py:

def traffic_task(request):
tasks_traffic = Task.objects.filter(category="traffic")
random_task = random.choice(tasks_traffic)
task_id = random_task.pk
user = request.user
user.userprofile.daily_task = task_id
user.save()
return task_detail(request=request, pk=task_id)

模型.py

class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
daily_task = models.IntegerField(default=0)
daily_task_done = models.BooleanField(default=False)
daily_task_done_time = models.DateTimeField(default=datetime.now() - timedelta(days=2))

它们位于两个不同的应用程序中,所以也许缺少导入?

最佳答案

您应该保存 UserProfile 对象,而不是 User 对象,因此类似于:

def traffic_task(request):
tasks_traffic = Task.objects.filter(category="traffic")
random_task = random.choice(tasks_traffic)
task_id = random_task.pk
userprofile = request.user.userprofile
userprofile.daily_task = task_id
# perhaps you want to set daily_task_done to False here
<b>userprofile.save()</b>
return task_detail(request=request, pk=task_id)

此外,根据您提供的代码,您似乎想向Task添加一个ForeignKey,最好保存主键的值,因为不强制执行 FOREIGN KEY 约束等:

class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
daily_task = <b>models.ForeignKey('someapp.Task', null=True, default=None)</b>
daily_task_done = models.BooleanField(default=False)
daily_task_done_time = models.DateTimeField(default=datetime.now() - timedelta(days=2))

然后您可以使用 Task 对象,例如:

def traffic_task(request):
tasks_traffic = Task.objects.filter(category="traffic")
random_task = random.choice(tasks_traffic)
userprofile = request.user.userprofile
userprofile.daily_task = <b>random_task</b>
userprofile.save()
return task_detail(request=request, pk=task_id)

因此,这会创建额外的验证,但使用 Task 对象也更方便,以防您想“批量”获取 Task ,可以使用 .select_lated(..).prefetch_lated(..) (尽管也可以使用 IntegerField 来完成此操作,它将需要额外的逻辑,因此不太优雅)。

关于python - 使用函数修改数据表 UserProfile 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com