1
0
mirror of https://github.com/django/django.git synced 2025-10-24 14:16:09 +00:00

Fixed #26521 -- Validated CreateModel bases, fields and managers for duplicates.

This commit is contained in:
James Robert
2016-04-27 12:43:56 -04:00
committed by Simon Charette
parent 6729b96d8a
commit 417e083e55
3 changed files with 86 additions and 12 deletions

View File

@@ -12,6 +12,16 @@ from .fields import (
)
def _check_for_duplicates(arg_name, objs):
used_vals = set()
for val in objs:
if val in used_vals:
raise ValueError(
'Found duplicate %s in CreateModel operation.' % arg_name
)
used_vals.add(val)
class ModelOperation(Operation):
def __init__(self, name):
self.name = name
@@ -43,6 +53,16 @@ class CreateModel(ModelOperation):
self.bases = bases or (models.Model,)
self.managers = managers or []
super(CreateModel, self).__init__(name)
# Sanity-check that there are no duplicated field names, bases, or
# manager names
_check_for_duplicates("field", (name for name, _ in self.fields))
_check_for_duplicates(
"base",
(base._meta.label_lower if isinstance(base, models.base.ModelBase) else base.lower()
for base in self.bases
if base is not models.Model)
)
_check_for_duplicates("manager", (name for name, _ in self.managers))
def deconstruct(self):
kwargs = {