mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 21:10:13 +03:00
blank fields shall not be required
This commit is contained in:
parent
33cfc2e486
commit
52064cb5b5
|
@ -223,9 +223,9 @@ def get_relation_kwargs(field_name, relation_info):
|
|||
# If this field is read-only, then return early.
|
||||
# No further keyword arguments are valid.
|
||||
return kwargs
|
||||
if model_field.has_default() or model_field.null:
|
||||
if model_field.has_default() or model_field.blank:
|
||||
kwargs['required'] = False
|
||||
if model_field.null:
|
||||
if model_field.blank:
|
||||
kwargs['allow_null'] = True
|
||||
if model_field.validators:
|
||||
kwargs['validators'] = model_field.validators
|
||||
|
|
|
@ -40,6 +40,17 @@ class ManyToManySource(RESTFrameworkModel):
|
|||
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
|
||||
class ForeignKeyTarget(RESTFrameworkModel):
|
||||
name = models.CharField(max_length=100)
|
||||
|
|
|
@ -5,6 +5,7 @@ from rest_framework import serializers
|
|||
from tests.models import (
|
||||
ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource,
|
||||
NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource,
|
||||
ManyToManyBlankedSource,
|
||||
)
|
||||
|
||||
|
||||
|
@ -21,6 +22,12 @@ class ManyToManySourceSerializer(serializers.ModelSerializer):
|
|||
fields = ('id', 'name', 'targets')
|
||||
|
||||
|
||||
class ManyToManyBlankedSourceSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ManyToManyBlankedSource
|
||||
fields = ('id', 'name', 'surname', 'story', 'targets')
|
||||
|
||||
|
||||
# ForeignKey
|
||||
class ForeignKeyTargetSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
@ -106,6 +113,17 @@ class PKManyToManyTests(TestCase):
|
|||
]
|
||||
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):
|
||||
data = {'id': 1, 'name': 'target-1', 'sources': [1]}
|
||||
instance = ManyToManyTarget.objects.get(pk=1)
|
||||
|
|
Loading…
Reference in New Issue
Block a user