如何使用kwargs更新Django中的模型

2024-04-24 16:19:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的模型编写更新方法:

class Task(models.Model):
    @staticmethod
    def update_task(task_id: int, calendar_path: str, **kwargs):
        cal = get_object_or_404(Calendar, path=calendar_path)
        task = get_object_or_404(Task, id=task_id)
        if task.calendar != cal:
            raise FieldError("Calendar does not contains this task")
        for field_name, value in kwargs:
            task

我希望重命名kwargs中的所有字段,例如: update_task(..., name = "New Name", description = "New description") 但如果不使用eval,我不知道如何做,但这不是一个好主意


Tags: orpathnameidnewtaskgetobject
2条回答

您可以使用解包*来完成此操作 例:

do_it(**{"la":"ga", "gaga":"laga"}) 

do_it(la = "ga", gaga= "laga") 

所以回答

Task.objects.update(**kwargs)

枚举完所有键值对后,您可以使用^{} [python-doc]并保存Task对象:

@staticmethod
def update_task(task_id: int, calendar_path: str, **kwargs):
    task = get_object_or_404(Task, id=task_id, calendar__path=calendar_path)
    for field_name, value in kwargs.items():
        setattr(task, field_name, value)
    task.save()

Asetattr(x, 'y', value)相当于x.y = value。我们还可以通过在过滤器部分添加get_object_or_404(…)来省略获取日历

相关问题 更多 >