Django - Fonction à l'intérieur d'un modèle. Comment l'appeler à partir d'une vue?
Je suis de la conception d'un modèle dans Django, mais je ne sais pas si c'est la meilleure façon. J'ai un modèle appelé "l'Histoire" et à l'intérieur de ce modèle, j'ai une fonction spécialisée qui va gérer les insertions à ce modèle.
Alternative 1
class History(models.Model):
field1 = models.ForeignKey(Request)
field2 = models.BooleanField()
field3 = models.DateTimeField()
def __unicode__(self):
return str(self.field1.id)
class Meta: #
ordering = ['-field3']
def insert_history(self):
# Here I will have some business logic to insert the data to the history model
Pour insérer des données à l'Histoire du modèle, je vais toujours avoir à utiliser le "insert_history" de la fonction.
Mes questions sont:
Le code ci-dessus est correcte?
Si oui, comment puis-je appeler le "insert_history" à partir d'un point de vue?
La variante 2
J'ai une autre solution que je l'ai testé et il fonctionne, mais ne se sent pas de la bonne façon. Le code ressemble à ceci:
class History(models.Model):
field1 = models.ForeignKey(Request)
field2 = models.BooleanField()
field3 = models.DateTimeField()
def __unicode__(self):
return str(self.field1.id)
class Meta: #
ordering = ['-field3']
def insert_history(field1, field2, field3):
# Here I will have some business logic to insert the data to the history model
Et je l'appeler à partir d'un point de vue comme ceci:
from app.models import insert_history
insert_history('1', True, 'some_date')
quelle est la façon correcte de le faire? Si la variante 1 est correct, comment puis-je appeler le "insert_history" à partir d'un point de vue?
Cordialement,
source d'informationauteur André
Vous devez vous connecter pour publier un commentaire.
Ne insert_history utilisation de l'auto? Ou faut-il créer une nouvelle Histoire de l'objet?
Si il crée un nouvel objet, je le ferais comme ceci:
Appeler
BTW, le nom conventionnel pour une méthode de création de nouveaux objets est
create
. Aussi, jetez un oeil à https://docs.djangoproject.com/en/1.9/ref/models/instances/#creating-objectsIl suffit de sélectionner votre Histoire instance (par exemple. avec de clé primaire 1):
...et appelez votre méthode à l'aide de la
hist
variable:Je pense qu'il est plus approprié d'utiliser personnalisés du gestionnaire de https://docs.djangoproject.com/en/dev/topics/db/managers/ pour ce problème.
La façon la plus simple est de remplacer la
enregistrer
méthode:Maintenant, chaque fois que vous enregistrez votre méthode -
field3
s'agira de la valeur quel que soit le résultat du calcul dans votre personnalisé méthode de sauvegarde. Vous n'avez pas besoin de modifier quoi que ce soit dans votre point de vue pour que cela fonctionne.