The general rule I have heard/used is that your database should be as strict as possible in what it accepts; your DB is your understanding of the world, and precluding bad data (or at least calling your attention to it) is a good trait.
(The field parameters are also useful when you want to generate right data with model_mommy; it will only generate data that fits your fields, so making them narrowly tailored helps CYA and write good tests.)
The default is False, so the easy road is the right one. Just mark what you need nullable :) .
EDIT: One place where you may need nullability is in polling foreign data. If you are mirroring an API that will use new objects in data before it tells you that there are new objects, then you will want data about that object to be nullable to avoid failing to save new data.
For example:
class Person(models.Model):
""" A person that might tweet """
name = models.CharField(max_length=200)
class Tweet(models.Model):
""" A message broadcast by a person. """
msg = models.TextField()
person = models.ForeignKey('Person')
if you are scraping tweets and hit a new Person's tweet before you save that Person, you might get_or_create an object to fill Tweet.person. However, you don't know that Person's name; you would want name to be nullable (and probably to run an integrity task on your DB regularly to find and fix these issues.)