Skip to content

Commit

Permalink
#22034 Changed approach to check GenericForeignKey with GenericInlin…
Browse files Browse the repository at this point in the history
…eModelAdminChecks
  • Loading branch information
josven committed Feb 23, 2014
1 parent a7bd6e0 commit 5ad15bf
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 7 deletions.
6 changes: 0 additions & 6 deletions django/contrib/admin/checks.py
Expand Up @@ -4,7 +4,6 @@
from itertools import chain

from django.contrib.admin.utils import get_fields_from_path, NotRelationField, flatten
from django.contrib.contenttypes.fields import GenericForeignKey
from django.core import checks
from django.db import models
from django.db.models.fields import FieldDoesNotExist
Expand Down Expand Up @@ -870,11 +869,6 @@ def _check_fk_name(self, cls, parent_model):
try:
_get_foreign_key(parent_model, cls.model, fk_name=cls.fk_name)
except ValueError as e:
# Check if generic, if not add error.
is_generic_inline_admin = any(
isinstance(vf, GenericForeignKey) for vf in parent_model._meta.virtual_fields)
if is_generic_inline_admin:
return []
return [checks.Error(e.args[0], hint=None, obj=cls, id='admin.E202')]
else:
return []
Expand Down
4 changes: 4 additions & 0 deletions django/contrib/contenttypes/admin.py
Expand Up @@ -6,6 +6,7 @@
from django.contrib.contenttypes.forms import (
BaseGenericInlineFormSet, generic_inlineformset_factory
)
from django.contrib.contenttypes.checks import GenericInlineModelAdminChecks
from django.forms import ALL_FIELDS
from django.forms.models import modelform_defines_fields

Expand All @@ -15,6 +16,9 @@ class GenericInlineModelAdmin(InlineModelAdmin):
ct_fk_field = "object_id"
formset = BaseGenericInlineFormSet

# Add new check class? So it;s possible to overide _check_fk_name
checks_class = GenericInlineModelAdminChecks

def get_formset(self, request, obj=None, **kwargs):
if 'fields' in kwargs:
fields = kwargs.pop('fields')
Expand Down
22 changes: 21 additions & 1 deletion django/contrib/contenttypes/checks.py
@@ -1,8 +1,28 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.utils import six
from django.apps import apps
from django.contrib.admin.checks import InlineModelAdminChecks
from django.contrib.contenttypes.fields import GenericForeignKey
from django.core import checks
from django.forms.models import _get_foreign_key
from django.utils import six


class GenericInlineModelAdminChecks(InlineModelAdminChecks):

def _check_fk_name(self, cls, parent_model):
try:
_get_foreign_key(parent_model, cls.model, fk_name=cls.fk_name)
except ValueError as e:
# Check if generic, if not add error.
is_generic_inline_admin = any(
isinstance(vf, GenericForeignKey) for vf in parent_model._meta.virtual_fields)
if is_generic_inline_admin:
return []
return [checks.Error(e.args[0], hint=None, obj=cls, id='admin.E202')]
else:
return []


def check_generic_foreign_keys(**kwargs):
Expand Down

0 comments on commit 5ad15bf

Please sign in to comment.