diff options
| author | Tom Christie | 2012-11-05 08:35:54 -0800 |
|---|---|---|
| committer | Tom Christie | 2012-11-05 08:35:54 -0800 |
| commit | b87f01aa54739ad82e090da1622e4f711a364402 (patch) | |
| tree | 3392dd47c9d2186ec9477b2523b685c6349a3376 /rest_framework/fields.py | |
| parent | 33217db33e924c6a5d43416edf4e83f50bff7ee3 (diff) | |
| parent | 6d201c362f030f6b3570247c4f8152a4d9c1e90f (diff) | |
| download | django-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.py | 19 |
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... |
