web-dev-qa-db-fra.com

La fonction save () est-elle appelée implicitement lors de l'appel de create dans django?

J'essaie d'effectuer une validation personnalisée sur un modèle et je suis confus. Laissez-moi être précis. Disons que mon code est le suivant:

class FooManager(models.Manager):
  def create_foo(self, name):
    return self.create(foo_name = name)

class Foo(models.Model):
  foo_name = models.CharField(max_length=30)
  objects = FooManager()

  def clean(self):
    ...
  def save(self, *args, **kwargs):
    self.full_clean()
    super(User, self).save(*args, **kwargs)

Maintenant, quand je travaille avec ce modèle du Shell, si j'appelle:

f = Foo.objects.create_foo ("")

Cela provoquera une erreur de validation avant que j'aie la possibilité d'appeler save () sur f. Pourquoi cela arrive-t-il? L'erreur de validation ne devrait-elle pas être déclenchée uniquement lorsque j'appelle f.save ()?

Remarque: la même chose se produit si j'utilise objects.create () par opposition à la méthode de création personnalisée définie. Toute aide serait grandement appréciée, car je trouve que les validations dans Django sont assez frustrantes.

33
innospark

create() sera automatiquement sauvegardé, donc même si vous corrigez votre erreur - vous devrez toujours vous assurer que les arguments à créer satisfont aux exigences de la base de données pour sauvegarder un enregistrement.

23
Burhan Khalid

Vous avez oublié de mettre self dans votre gestionnaire

class FooManager(models.Manager):
    def create_foo(self, name):
        return self.create(foo_name = name)
0
catherine