I'm trying to perform some custom validation on a model and I'm getting confused. Let me be specific. Let's say my code is as follows:
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)
Now, when I am working with this model from the shell, if I call:
f = Foo.objects.create_foo("")
It will raise a validation error before I get a chance to call save() on f. Why does this happen? Shouldn't the validation error only be raised once I call f.save()?
Note: the same thing happens if I use objects.create() as opposed to the custom defined create method. Any help would be greatly appreciated, as I'm finding validations in django to be fairly frustrating.
create() will automatically save, so even if you fix your error - you will still have to make sure the arguments to create fulfill the database requirements to save a record.
save() method can be used to insert new record and update existing record and generally used for saving instance of single record(row in mysql) in database.
To save changes to an object that's already in the database, use save() . This performs an UPDATE SQL statement behind the scenes. Django doesn't hit the database until you explicitly call save() .
Saving objects. To save an object back to the database, call save() : Model.
create()
will automatically save, so even if you fix your error - you will still have to make sure the arguments to create fulfill the database requirements to save a record.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With