mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -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,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' | ||||
| """ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user