aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/fields.py
diff options
context:
space:
mode:
authorTom Christie2012-11-05 08:35:54 -0800
committerTom Christie2012-11-05 08:35:54 -0800
commitb87f01aa54739ad82e090da1622e4f711a364402 (patch)
tree3392dd47c9d2186ec9477b2523b685c6349a3376 /rest_framework/fields.py
parent33217db33e924c6a5d43416edf4e83f50bff7ee3 (diff)
parent6d201c362f030f6b3570247c4f8152a4d9c1e90f (diff)
downloaddjango-rest-framework-b87f01aa54739ad82e090da1622e4f711a364402.tar.bz2
Merge pull request #371 from tomchristie/serializer-fixes
Serializer fixes
Diffstat (limited to 'rest_framework/fields.py')
-rw-r--r--rest_framework/fields.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index eb4c5e1f..dc726a32 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -40,7 +40,7 @@ class Field(object):
self.source = source
- def initialize(self, parent):
+ def initialize(self, parent, field_name):
"""
Called to set up a field prior to field_to_native or field_from_native.
@@ -248,7 +248,22 @@ class RelatedField(WritableField):
def __init__(self, *args, **kwargs):
self.queryset = kwargs.pop('queryset', None)
super(RelatedField, self).__init__(*args, **kwargs)
- self.read_only = self.default_read_only
+ self.read_only = kwargs.pop('read_only', self.default_read_only)
+
+ def initialize(self, parent, field_name):
+ super(RelatedField, self).initialize(parent, field_name)
+ if self.queryset is None and not self.read_only:
+ try:
+ manager = getattr(self.parent.opts.model, self.source or field_name)
+ if hasattr(manager, 'related'): # Forward
+ self.queryset = manager.related.model._default_manager.all()
+ else: # Reverse
+ self.queryset = manager.field.rel.to._default_manager.all()
+ except:
+ raise
+ msg = ('Serializer related fields must include a `queryset`' +
+ ' argument or set `read_only=True')
+ raise Exception(msg)
### We need this stuff to make form choices work...