mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-23 10:03:57 +03:00
commit
2ecd984172
|
@ -65,16 +65,11 @@ class RelatedField(WritableField):
|
|||
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 Exception:
|
||||
msg = ('Serializer related fields must include a `queryset`' +
|
||||
' argument or set `read_only=True')
|
||||
raise Exception(msg)
|
||||
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()
|
||||
|
||||
### We need this stuff to make form choices work...
|
||||
|
||||
|
|
|
@ -98,3 +98,23 @@ class RelatedFieldSourceTests(TestCase):
|
|||
obj = ClassWithQuerysetMethod()
|
||||
value = field.field_to_native(obj, 'field_name')
|
||||
self.assertEqual(value, ['BlogPost object'])
|
||||
|
||||
# Regression for #1129
|
||||
def test_exception_for_incorect_fk(self):
|
||||
"""
|
||||
Check that the exception message are correct if the source field
|
||||
doesn't exist.
|
||||
"""
|
||||
from rest_framework.tests.models import ManyToManySource
|
||||
class Meta:
|
||||
model = ManyToManySource
|
||||
attrs = {
|
||||
'name': serializers.SlugRelatedField(
|
||||
slug_field='name', source='banzai'),
|
||||
'Meta': Meta,
|
||||
}
|
||||
|
||||
TestSerializer = type(str('TestSerializer'),
|
||||
(serializers.ModelSerializer,), attrs)
|
||||
with self.assertRaises(AttributeError):
|
||||
TestSerializer(data={'name': 'foo'})
|
||||
|
|
Loading…
Reference in New Issue
Block a user