I have two classes in my sqlite database, a parent table named Categorie
and the child table called Article
. I created first the child table class and addes entries. So first I had this:
class Article(models.Model): titre=models.CharField(max_length=100) auteur=models.CharField(max_length=42) contenu=models.TextField(null=True) date=models.DateTimeField( auto_now_add=True, auto_now=False, verbose_name="Date de parution" ) def __str__(self): return self.titre
And after I have added parent table, and now my models.py
looks like this:
from django.db import models # Create your models here. class Categorie(models.Model): nom = models.CharField(max_length=30) def __str__(self): return self.nom class Article(models.Model): titre=models.CharField(max_length=100) auteur=models.CharField(max_length=42) contenu=models.TextField(null=True) date=models.DateTimeField( auto_now_add=True, auto_now=False, verbose_name="Date de parution" ) categorie = models.ForeignKey('Categorie') def __str__(self): return self.titre
So when I run python manage.py makemigrations <my_app_name>
, I get this error:
Traceback (most recent call last): File "manage.py", line 15, in <module> execute_from_command_line(sys.argv) File "C:UserslislisAppDataLocalProgramsPythonPython35-32libsite-packagesdjango-2.0-py3.5.eggdjangocoremanagement__init__.py", line 354, in execute_from_command_line utility.execute() File "C:UserslislisAppDataLocalProgramsPythonPython35-32libsite-packagesdjango-2.0-py3.5.eggdjangocoremanagement__init__.py", line 330, in execute django.setup() File "C:UserslislisAppDataLocalProgramsPythonPython35-32libsite-packagesdjango-2.0-py3.5.eggdjango__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "C:UserslislisAppDataLocalProgramsPythonPython35-32libsite-packagesdjango-2.0-py3.5.eggdjangoappsregistry.py", line 112, in populate app_config.import_models() File "C:UserslislisAppDataLocalProgramsPythonPython35-32libsite-packagesdjango-2.0-py3.5.eggdjangoappsconfig.py", line 198, in import_models self.models_module = import_module(models_module_name) File "C:UserslislisAppDataLocalProgramsPythonPython35-32libimportlib__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 986, in _gcd_import File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 665, in exec_module File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed File "C:UserslislisDjangomon_siteblogmodels.py", line 6, in <module> class Article(models.Model): File "C:UserslislisDjangomon_siteblogmodels.py", line 16, in Article categorie = models.ForeignKey('Categorie') TypeError: __init__() missing 1 required positional argument: 'on_delete'
I’ve seen some similar issues in stackoverflow, but it seems to not be the same problem: __init__() missing 1 required positional argument: ‘quantity’
Advertisement
Answer
You can change the property categorie
of the class Article
like this:
categorie = models.ForeignKey( 'Categorie', on_delete=models.CASCADE, )
and the error should disappear.
Eventually you might need another option for on_delete
, check the documentation for more details:
Arguments — Model field reference — Django documentation
As you stated in your comment, that you don’t have any special requirements for on_delete
, you could use the option DO_NOTHING
:
# ... on_delete=models.DO_NOTHING, # ...