mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-07 22:04:48 +03:00
Change key type for RelatedField and ManyRelatedField choices
Fixes: #2416 choices() also did not work if queryset was a manager. It would raise a "'*Manager' object is not iterable" that would later get silenced by Django template system.
This commit is contained in:
parent
11e3cfbf6e
commit
e2ec3800e7
|
@ -111,10 +111,10 @@ class RelatedField(Field):
|
|||
def choices(self):
|
||||
return OrderedDict([
|
||||
(
|
||||
six.text_type(self.to_representation(item)),
|
||||
self.to_representation(item),
|
||||
six.text_type(item)
|
||||
)
|
||||
for item in self.get_queryset()
|
||||
for item in self.get_queryset().all()
|
||||
])
|
||||
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ from django.core.exceptions import ImproperlyConfigured
|
|||
from django.utils.datastructures import MultiValueDict
|
||||
|
||||
from rest_framework import serializers
|
||||
from rest_framework.compat import OrderedDict
|
||||
from rest_framework.fields import empty
|
||||
from rest_framework.test import APISimpleTestCase
|
||||
|
||||
|
@ -58,6 +59,13 @@ class TestPrimaryKeyRelatedField(APISimpleTestCase):
|
|||
instance = field.to_internal_value(self.instance.pk)
|
||||
assert instance is self.instance
|
||||
|
||||
def test_choices(self):
|
||||
self.assertEquals(
|
||||
OrderedDict([(1, '<MockObject name=foo, pk=1>'),
|
||||
(2, '<MockObject name=bar, pk=2>'),
|
||||
(3, '<MockObject name=baz, pk=3>')]),
|
||||
self.field.choices)
|
||||
|
||||
|
||||
class TestProxiedPrimaryKeyRelatedField(APISimpleTestCase):
|
||||
def setUp(self):
|
||||
|
@ -206,3 +214,17 @@ class TestManyRelatedField(APISimpleTestCase):
|
|||
|
||||
mvd = MultiValueDict({'baz': ['bar1', 'bar2']})
|
||||
assert empty == self.field.get_value(mvd)
|
||||
|
||||
def test_choices(self):
|
||||
queryset = MockQueryset([
|
||||
MockObject(pk=1, name='foo'),
|
||||
MockObject(pk=2, name='bar'),
|
||||
MockObject(pk=3, name='baz')
|
||||
])
|
||||
field = serializers.ManyRelatedField(
|
||||
child_relation=serializers.PrimaryKeyRelatedField(queryset=queryset))
|
||||
self.assertEquals(
|
||||
OrderedDict([(1, '<MockObject name=foo, pk=1>'),
|
||||
(2, '<MockObject name=bar, pk=2>'),
|
||||
(3, '<MockObject name=baz, pk=3>')]),
|
||||
field.choices)
|
||||
|
|
|
@ -53,6 +53,9 @@ class MockQueryset(object):
|
|||
return item
|
||||
raise ObjectDoesNotExist()
|
||||
|
||||
def all(self):
|
||||
return self.items
|
||||
|
||||
|
||||
class BadType(object):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user