【问题标题】:Unable to change the value of foreign key to foreign key of an object Django无法将外键的值更改为对象 Django 的外键
【发布时间】:2018-09-02 19:54:33
【问题描述】:

我的模型结构如下:

class user(models.Model):
    name = models.CharField(max_length=100)
    tasks = models.IntegerField(default=0)



class project(models.Model):
    worker = models.ForeignKey(user, on_delete=models.CASCADE)
    project_name = models.CharField(max_length=100)


class task(models.Model):
    project = models.ForeignKey(project, on_delete=models.CASCADE)
    task_name = models.CharField(max_length=150)
    expected_date = models.DateField(auto_now=False,auto_now_add=False,)
    actual_date = models.DateField(auto_now=False,auto_now_add=False,blank=True,null=True,)

我想遍历任务列表,如果实际日期字段不为空,即任务已完成,则将用户类中的任务字段更新 1。我编写了以下代码:

a = task.objects.filter(actual_date__isnull=False)
for x in a:
    x.project.worker.tasks+=1

但是,这并没有给出预期的结果。我该怎么办?

【问题讨论】:

  • 非常感谢@solarissmoke!完美解决!关于命名约定,实际上是管理员对他们需要的名称的要求。再次感谢:)

标签: mysql django django-models django-queryset


【解决方案1】:

修改对象后,您并没有保存对象 - 只是修改值不会将其写入数据库。试试这个:

a = task.objects.filter(actual_date__isnull=False)
for x in a:
    worker = x.project.worker
    worker.tasks += 1
    worker.save()

另外,您应该考虑遵循 PEP8 约定并使用 CamelCase 作为您的类名。就目前而言,您可以非常轻松地将类与对象混合在一起。

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 2021-09-20
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多