SQLite databases don’t care about your using of
max_length on your models. Let’s look at an example.
class Book(models.Model): title = models.CharField(max_length=30)
Now, we’ll run some queries.
$ ./manage.py makemigrations $ ./manage.py migrate $ ./manage.py shell >>> from book.models import Book >>> title = 'A' * 31 >>> print len(title) 31 >>> book = Book.objects.create(title=title) >>> book.save() >>> len(book.title) 31
When running SQL queries using SQLite, you find that you can create records and the database will save a
CharField with attributes with bigger strings than what the
Is there any way we can fix this? Sure there is!
One way that we can validate if our model instance is correct is to run a method called
So, what we can do is override our
save() method so that we can validate our SQLite model before we save our model. Let’s take a look.
class Book(models.Model): title = models.CharField(max_length=10) def save(self, *args, **kwargs): try: self.full_clean() super(Book, self).save(*args, **kwargs) except: print "Error saving model"
As you can see, if
self.full_clean() throws an error, our instance will print out ‘Error saving model’ and our save method will not save our record to the database.
Try this out next time you use SQLite for your database.
I hope that works for you!
Similar PostsWhat do you do when 'makemigrations' is telling you About your Lack of Default Value
How to Implement Many-To-Many Relationship in Django
Test your Queries before they make it into Production using the Django Shell
I have a ChoiceField Callable that Includes a Queryset but it Breaks my Django app
How to filter a DateTimeField by today's date in Django
Help! My Models feel Bloated! Why you should write a custom Manager
What do you do after the Official Django Tutorial?
Here's what you'll learn:
- Start writing tests
- Increase the size / complexity of the Polls application.
- Learn how to code in Django by reading the Django source code.
- Finding code snippets to use in your website by reading the code of other websites.
- Deploying on Heroku and AWS.