如何从模型方法中进行更新

时间:2018-11-07 20:07:47

标签: python django

我尝试编写以下方法:

class MTurk(models.Model):
    ...

    def parse(self, url):

        res = requests.get(url)
        node = html.fromstring(res.content)
        data = MTurk()._parse_page(node)

        self.update(**data)        

但是,当我尝试做self.update(**data)时,它会告诉我:

  

AttributeError:'MTurk'对象没有属性'update'

通常我会做MTurk.objects.filter(pk=self.pk).update(**data),但是有没有一种方法可以从模型方法本身中执行此操作而不必重新调用所有内容?

1 个答案:

答案 0 :(得分:1)

update函数似乎无法从单个对象访问,而是在QuerySet上使用。

但是,这不是处理此类功能的一种非常Django的方式,但是您宁愿将模型保存在模型外部,基本上是从最初位于parse的函数/位置保存的像这样:

# Fetch an object
mturk = MTurk.objects.get(id=1)
# Call the parse method
mturk.parse(my_url)
# Save the object
mturk.save()

不过,您当然仍然可以从模型中调用save函数,在这种情况下,只需将update函数替换为save函数,然后需要使用self将值存储到模型中。

save函数还带有一个参数update_fields=[],您可以在其中指定要保存的字段(忽略其余字段)。这可能就是您要寻找的。

class MTurk(models.Model):
    ...

    def parse(self, url):

        res = requests.get(url)
        node = html.fromstring(res.content)
        data = MTurk()._parse_page(node)

        self.data_1 = node # Store some data
        self.data_2 = data # Store some more data
        # Only save the given fields
        self.save(update_fields=["data_1", "data_2])