Abhishek Bhatnagar
Abhishek Bhatnagar

Reputation: 21

Missing 1 required positional argument: 'on_delete' in django model

I'm getting this error: Missing 1 required positional argument: 'on_delete' in django model

from django.db import models

class Topic(models.Model):
   top_name = models.CharField(max_length=264, unique=True)

   def __str__(self):
       return self.top_name


class Webpage(models.Model):
   topic = models.ForeignKey(Topic)
   name = models.CharField(max_length=264, unique=True)
   url = models.URLField(unique=True)

   def __str__(self):
       return self.name


class AccessRecord(models.Model):
   name = models.ForeignKey(Webpage)
   date = models.DateField()

   def __str__(self):
       return str(self.date)

I'm using Django v3.0 in Pycharm

[My code][1] [1]: https://i.sstatic.net/u4RGE.png

Upvotes: 0

Views: 3086

Answers (2)

mehrdadep
mehrdadep

Reputation: 1019

on_delete option on foreign keys is a required field. You have to use it in Django version 2.0 or higher. The possible values for on_delete are found in django.db.models docs. For example you can change your models to these:


class Webpage(models.Model):  
    topic = models.ForeignKey(Topic, on_delete=models.PROTECT)
    .
    .
class AccessRecord(models.Model): 
    name = models.ForeignKey(Webpage, on_delete=models.PROTECT)

This will prevent deletion of the referenced object by raising ProtectedError

Upvotes: 1

noob
noob

Reputation: 140

Change these two models

class Webpage(models.Model):  
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    .
    .
class AccessRecord(models.Model): 
    name = models.ForeignKey(Webpage, on_delete=models.CASCADE)

Upvotes: 0

Related Questions