From 6b1eb578f544517620de8e0abbec391a839a3d0c Mon Sep 17 00:00:00 2001 From: Joseph Spiros Date: Thu, 12 Aug 2010 17:04:38 -0400 Subject: [PATCH] Explicit declaration of keys for AttributeFields and RelationshipFields is now unnecessary, as they will use the attribute name on the model class they were assigned to by default. This implements feature #20. --- models/fields.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/models/fields.py b/models/fields.py index 621d7a1..50df799 100644 --- a/models/fields.py +++ b/models/fields.py @@ -70,13 +70,18 @@ class AttributeFieldDescriptor(object): class AttributeField(EntityProxyField): descriptor_class = AttributeFieldDescriptor - def __init__(self, key, field_template=None): - super(AttributeField, self).__init__() + def __init__(self, field_template=None, key=None, **kwargs): + super(AttributeField, self).__init__(**kwargs) self.key = key if field_template is None: field_template = models.CharField(max_length=255) self.field_template = field_template + def contribute_to_class(self, cls, name): + super(AttributeField, self).contribute_to_class(cls, name) + if self.key is None: + self.key = name + def formfield(self, **kwargs): defaults = {'required': False, 'label': capfirst(self.verbose_name), 'help_text': self.help_text} defaults.update(kwargs) @@ -117,14 +122,19 @@ class RelationshipFieldDescriptor(object): class RelationshipField(EntityProxyField): descriptor_class = RelationshipFieldDescriptor - def __init__(self, key, model, limit_choices_to=None): - super(RelationshipField, self).__init__() + def __init__(self, model, limit_choices_to=None, key=None, **kwargs): + super(RelationshipField, self).__init__(**kwargs) self.key = key self.model = model if limit_choices_to is None: limit_choices_to = {} self.limit_choices_to = limit_choices_to + def contribute_to_class(self, cls, name): + super(RelationshipField, self).contribute_to_class(cls, name) + if self.key is None: + self.key = name + def formfield(self, form_class=forms.ModelChoiceField, **kwargs): defaults = {'required': False, 'label': capfirst(self.verbose_name), 'help_text': self.help_text} defaults.update(kwargs) -- 2.20.1