Как обновить внутри метода модели

голоса
0

У меня есть следующий метод, который я пытаюсь написать:

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» не имеет атрибута «Обновить»

Обычно я хотел бы сделать MTurk.objects.filter(pk=self.pk).update(**data), но есть способ сделать это внутри самого метода модели без необходимости повторно назвать все?

Задан 07/11/2018 в 20:07
источник пользователем
На других языках...                            


1 ответов

голоса
1

updateФункция , кажется, не доступен из отдельного объекта, а скорее используется на QuerySet .

Это , однако , не очень Djangonic способ обработки такого рода функциональность, но вы бы скорее хотели бы сохранить модель вне модели, в основном из функции / место , которое называется 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])
Ответил 07/11/2018 в 20:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more