mirror of
https://github.com/django/django.git
synced 2025-03-06 15:32:33 +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:
parent
597f9d6105
commit
b3b8422363
@ -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()
|
||||||
|
|
||||||
|
"""}
|
Loading…
x
Reference in New Issue
Block a user