Comment mettre à jour à partir d'une méthode de modèle

voix
0

J'ai la méthode suivante, je suis en train d'écrire:

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)        

Cependant, quand je tente de le faire , self.update(**data)il me dit:

AttributeError: objet « MTurk » n'a pas d'attribut « mise à jour »

Normalement , je le ferais MTurk.objects.filter(pk=self.pk).update(**data), mais est - il un moyen de le faire à partir de la méthode de modèle lui - même sans avoir à tout nouveau appel?

Créé 07/11/2018 à 20:07
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

La updatefonction ne semble pas être accessible à partir d' un objet individuel, mais est plutôt utilisé sur un QuerySet .

Il est cependant pas une façon très Djangonic de gérer ce genre de fonctionnalité, mais vous souhaitez plutôt enregistrer le modèle en dehors du modèle, essentiellement de la fonction / lieu qui a appelé parseen premier lieu, essentiellement comme suit:

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

Vous pouvez cependant appeler encore la savefonction dans le modèle bien sûr, dans ce cas , vous souhaitez remplacer simplement la updatefonction avec une savefonction, et vous aurez besoin de stocker les valeurs du modèle avec self.

La savefonction prend également un argument update_fields=[]dans lequel vous pouvez spécifier quels champs que vous souhaitez enregistrer (et ignorer le reste). Cela pourrait être ce que vous cherchez.

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])
Créé 07/11/2018 à 20:23
source utilisateur

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