mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #6445 -- Allow model instances to be used as a default for ForeignKeys
(via a callable). Also updates the documentation of the "default" attribute to indicate a callable can be used. Thanks, Philipe Raoult. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7331 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -548,6 +548,13 @@ class ForeignKey(RelatedField, Field): | |||||||
|             params['choices'] = self.get_choices_default() |             params['choices'] = self.get_choices_default() | ||||||
|         return field_objs, params |         return field_objs, params | ||||||
|  |  | ||||||
|  |     def get_default(self): | ||||||
|  |         "Here we check if the default value is an object and return the to_field if so." | ||||||
|  |         field_default = super(ForeignKey, self).get_default() | ||||||
|  |         if isinstance(field_default, self.rel.to): | ||||||
|  |             return getattr(field_default, self.rel.get_related_field().attname) | ||||||
|  |         return field_default | ||||||
|  |  | ||||||
|     def get_manipulator_field_objs(self): |     def get_manipulator_field_objs(self): | ||||||
|         rel_field = self.rel.get_related_field() |         rel_field = self.rel.get_related_field() | ||||||
|         if self.rel.raw_id_admin and not isinstance(rel_field, AutoField): |         if self.rel.raw_id_admin and not isinstance(rel_field, AutoField): | ||||||
|   | |||||||
| @@ -626,7 +626,8 @@ option is ignored. | |||||||
| ``default`` | ``default`` | ||||||
| ~~~~~~~~~~~ | ~~~~~~~~~~~ | ||||||
|  |  | ||||||
| The default value for the field. | The default value for the field. This can be a value or a callable object. If | ||||||
|  | callable it will be called every time a new object is created. | ||||||
|  |  | ||||||
| ``editable`` | ``editable`` | ||||||
| ~~~~~~~~~~~~ | ~~~~~~~~~~~~ | ||||||
|   | |||||||
| @@ -0,0 +1,24 @@ | |||||||
|  |  | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  | class Foo(models.Model): | ||||||
|  |     a = models.CharField(max_length=10) | ||||||
|  |  | ||||||
|  | def get_foo(): | ||||||
|  |     return Foo.objects.get(id=1) | ||||||
|  |  | ||||||
|  | class Bar(models.Model): | ||||||
|  |     b = models.CharField(max_length=10) | ||||||
|  |     a = models.ForeignKey(Foo, default=get_foo) | ||||||
|  |  | ||||||
|  | __test__ = {'API_TESTS':""" | ||||||
|  | # Create a couple of Places. | ||||||
|  | >>> f = Foo.objects.create(a='abc') | ||||||
|  | >>> f.id | ||||||
|  | 1 | ||||||
|  | >>> b = Bar(b = "bcd") | ||||||
|  | >>> b.a | ||||||
|  | <Foo: Foo object> | ||||||
|  | >>> b.save() | ||||||
|  |  | ||||||
|  | """} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user