python.django.performance.access-foreign-keys.access-foreign-keys

profile photo of returntocorpreturntocorp
Author
7,173
Download Count*

You should use ITEM.user_id rather than ITEM.user.id to prevent running an extra query.

Run Locally

Run in CI

Defintion

rules:
  - id: access-foreign-keys
    patterns:
      - pattern-either:
          - pattern-inside: |
              from django.$Y import $Z
              ...
          - pattern-inside: |
              import django
              ...
      - pattern: $X.user.id
      - pattern-not: request.user.id
    message: You should use ITEM.user_id rather than ITEM.user.id to prevent running
      an extra query.
    languages:
      - python
    severity: WARNING
    metadata:
      category: performance
      technology:
        - django
      license: Commons Clause License Condition v1.0[LGPL-2.1-only]

Examples

access-foreign-keys.py

from django.http import HttpResponse
from models import User

def cool_view(request):
    # ok: access-foreign-keys
    return HttpResponse({'user_id': request.user.id})

def other():
    # ruleid: access-foreign-keys
    print(User.user.id)