Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用函数修改数据表UserProfile中的值_Python_Django_Django Models_Django Views - Fatal编程技术网

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

Python 使用函数修改数据表UserProfile中的值,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我正在尝试运行.save()来更改用户模型字段的值 这是我的密码: Views.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.userprofil

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

这是我的密码:

Views.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)
Models.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
    userprofile.save()
    return task_detail(request=request, pk=task_id)
然后可以使用
任务
对象,如:

def traffic_task(request):
    tasks_traffic = Task.objects.filter(category="traffic")
    random_task = random.choice(tasks_traffic)
    userprofile = request.user.userprofile
    userprofile.daily_task = random_task
    userprofile.save()
    return task_detail(request=request, pk=task_id)
def traffic_任务(请求):
tasks\u traffic=Task.objects.filter(category=“traffic”)
随机任务=随机。选择(任务和流量)
userprofile=request.user.userprofile
userprofile.daily\u task=随机任务
userprofile.save()
返回任务详细信息(请求=请求,主键=任务id)

这样可以创建额外的验证,但使用
任务
对象也更方便,如果您想批量获得
任务
s,可以使用
。选择相关(…)
,或
。预取相关(…)
(虽然也可以使用
整型字段来完成此操作,但它需要额外的逻辑,因此不那么优雅)。

您应该保存
用户配置文件,而不是
用户
。此外,
日常任务
应该是
外键
,以执行
任务
。谢谢!这很有帮助:)daily_任务只是用户当天将呈现的任务的引用。
def traffic_task(request):
    tasks_traffic = Task.objects.filter(category="traffic")
    random_task = random.choice(tasks_traffic)
    userprofile = request.user.userprofile
    userprofile.daily_task = random_task
    userprofile.save()
    return task_detail(request=request, pk=task_id)