mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-06 05:20:12 +03:00
Merge 52064cb5b5
into 46181341d5
This commit is contained in:
commit
9361689d97
|
@ -223,9 +223,9 @@ def get_relation_kwargs(field_name, relation_info):
|
||||||
# If this field is read-only, then return early.
|
# If this field is read-only, then return early.
|
||||||
# No further keyword arguments are valid.
|
# No further keyword arguments are valid.
|
||||||
return kwargs
|
return kwargs
|
||||||
if model_field.has_default() or model_field.null:
|
if model_field.has_default() or model_field.blank:
|
||||||
kwargs['required'] = False
|
kwargs['required'] = False
|
||||||
if model_field.null:
|
if model_field.blank:
|
||||||
kwargs['allow_null'] = True
|
kwargs['allow_null'] = True
|
||||||
if model_field.validators:
|
if model_field.validators:
|
||||||
kwargs['validators'] = model_field.validators
|
kwargs['validators'] = model_field.validators
|
||||||
|
|
|
@ -40,6 +40,17 @@ class ManyToManySource(RESTFrameworkModel):
|
||||||
targets = models.ManyToManyField(ManyToManyTarget, related_name='sources')
|
targets = models.ManyToManyField(ManyToManyTarget, related_name='sources')
|
||||||
|
|
||||||
|
|
||||||
|
class ManyToManyBlankedSource(RESTFrameworkModel):
|
||||||
|
"""
|
||||||
|
Some fields can be blank without being null
|
||||||
|
"""
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
surname = models.CharField(max_length=100, blank=True)
|
||||||
|
story = models.TextField(blank=True)
|
||||||
|
targets = models.ManyToManyField(ManyToManyTarget, blank=True,
|
||||||
|
related_name='blank_sources')
|
||||||
|
|
||||||
|
|
||||||
# ForeignKey
|
# ForeignKey
|
||||||
class ForeignKeyTarget(RESTFrameworkModel):
|
class ForeignKeyTarget(RESTFrameworkModel):
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
|
|
|
@ -5,6 +5,7 @@ from rest_framework import serializers
|
||||||
from tests.models import (
|
from tests.models import (
|
||||||
ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource,
|
ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource,
|
||||||
NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource,
|
NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource,
|
||||||
|
ManyToManyBlankedSource,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,6 +22,12 @@ class ManyToManySourceSerializer(serializers.ModelSerializer):
|
||||||
fields = ('id', 'name', 'targets')
|
fields = ('id', 'name', 'targets')
|
||||||
|
|
||||||
|
|
||||||
|
class ManyToManyBlankedSourceSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = ManyToManyBlankedSource
|
||||||
|
fields = ('id', 'name', 'surname', 'story', 'targets')
|
||||||
|
|
||||||
|
|
||||||
# ForeignKey
|
# ForeignKey
|
||||||
class ForeignKeyTargetSerializer(serializers.ModelSerializer):
|
class ForeignKeyTargetSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -106,6 +113,17 @@ class PKManyToManyTests(TestCase):
|
||||||
]
|
]
|
||||||
self.assertEqual(serializer.data, expected)
|
self.assertEqual(serializer.data, expected)
|
||||||
|
|
||||||
|
def test_many_to_many_blanked_retrieve(self):
|
||||||
|
data = {'id': 1, 'name': 'source-1-updated'}
|
||||||
|
instance = ManyToManyBlankedSource(name='source-%d' % data['id'])
|
||||||
|
instance.save()
|
||||||
|
serializer = ManyToManyBlankedSourceSerializer(instance, data=data)
|
||||||
|
self.assertTrue(serializer.is_valid())
|
||||||
|
serializer.save()
|
||||||
|
# set default values
|
||||||
|
data.update({'targets': [], 'surname': '', 'story': ''})
|
||||||
|
self.assertEqual(serializer.data, data)
|
||||||
|
|
||||||
def test_reverse_many_to_many_update(self):
|
def test_reverse_many_to_many_update(self):
|
||||||
data = {'id': 1, 'name': 'target-1', 'sources': [1]}
|
data = {'id': 1, 'name': 'target-1', 'sources': [1]}
|
||||||
instance = ManyToManyTarget.objects.get(pk=1)
|
instance = ManyToManyTarget.objects.get(pk=1)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user