python.django.correctness.model-save.django-db-model-save-super

Author
7,380
Download Count*
License
Detected a django model $MODEL
is not calling super().save() inside of the save method.
Run Locally
Run in CI
Defintion
rules:
- id: django-db-model-save-super
patterns:
- pattern-inside: |
class $MODEL(django.db.models.Model):
...
- pattern-not: |
def save(self, ...):
...
super($MODEL, self).save(...)
- pattern-not: |
def save(self, ...):
...
super().save(...)
- pattern: |
def save(self, ...):
...
message: Detected a django model `$MODEL` is not calling super().save() inside
of the save method.
languages:
- python
severity: WARNING
metadata:
category: correctness
technology:
- django
license: Commons Clause License Condition v1.0[LGPL-2.1-only]
Examples
model-save.py
from django.db import models
from django.template.defaultfilters import slugify
class Post(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(unique=True, max_length=255)
# ok: django-db-model-save-super
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Post, self).save(*args, **kwargs)
class Bad(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(unique=True, max_length=255)
# ruleid: django-db-model-save-super
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
class ModelIssue1106(models.Model):
# ok: django-db-model-save-super
def save(self, *args, **kwargs):
print("my overriden save method")
super().save(*args, **kwargs)
class ModelIssue1106_2(models.Model):
# ok: django-db-model-save-super
def save(self, *args, **kwargs):
print("my overriden save method")
super(ModelIssue1106_2, self).save(*args, **kwargs)
Short Link: https://sg.run/6nN1