Commit 1fc3b322 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

Fixed #1683 -- Permit initialising models using settable properties as well as

field names.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@3145 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 214d88ce
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -107,6 +107,12 @@ class Model(object):
            else:
                val = kwargs.pop(f.attname, f.get_default())
                setattr(self, f.attname, val)
        for prop in kwargs.keys():
            try:
                if isinstance(getattr(self.__class__, prop), property):
                    setattr(self, prop, kwargs.pop(prop))
            except AttributeError:
                pass
        if kwargs:
            raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]
        for i, arg in enumerate(args):
+12 −0
Original line number Diff line number Diff line
@@ -12,8 +12,14 @@ class Person(models.Model):

    def _get_full_name(self):
        return "%s %s" % (self.first_name, self.last_name)

    def _set_full_name(self, combined_name):
        self.first_name, self.last_name = combined_name.split(' ', 1)

    full_name = property(_get_full_name)

    full_name_2 = property(_get_full_name, _set_full_name)

API_TESTS = """
>>> a = Person(first_name='John', last_name='Lennon')
>>> a.save()
@@ -25,4 +31,10 @@ API_TESTS = """
Traceback (most recent call last):
    ...
AttributeError: can't set attribute

# But "full_name_2" has, and it can be used to initialise the class.
>>> a2 = Person(full_name_2 = 'Paul McCartney')
>>> a2.save()
>>> a2.first_name
'Paul'
"""