mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-31 18:40:07 +03:00
adding_appendlist_field:adding append list field
This commit is contained in:
parent
61379205d4
commit
389f7f4dbc
|
@ -1949,3 +1949,15 @@ class TransformitiveFieldMixin():
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError("apply_tranformation is not implement for this field %s" % self.field_name)
|
raise NotImplementedError("apply_tranformation is not implement for this field %s" % self.field_name)
|
||||||
|
|
||||||
|
|
||||||
|
class AppendListField(ListField, TransformitiveFieldMixin):
|
||||||
|
"""
|
||||||
|
it's field works with modelserializer that appends the old list value and the new list value
|
||||||
|
"""
|
||||||
|
|
||||||
|
def apply_transformation(self, instance, data):
|
||||||
|
old_value = self.get_attribute(instance) or []
|
||||||
|
new_value = self.get_value(data) or []
|
||||||
|
if new_value != empty:
|
||||||
|
data[self.field_name] = old_value + new_value
|
||||||
|
|
|
@ -8,6 +8,7 @@ from decimal import ROUND_DOWN, ROUND_UP, Decimal
|
||||||
import pytest
|
import pytest
|
||||||
import pytz
|
import pytz
|
||||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||||
|
from django.db import models
|
||||||
from django.http import QueryDict
|
from django.http import QueryDict
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
|
@ -2288,3 +2289,42 @@ class TestValidationErrorCode:
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
class ListFieldModel(models.Model):
|
||||||
|
list_field = models.ListField(child=models.CharField)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestAppendListField(TestCase):
|
||||||
|
class TestSerializer(serializers.ModelSerializer):
|
||||||
|
list_field = serializers.AppendListField(child=serializers.CharField)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = ListFieldModel
|
||||||
|
fields = ('list_field')
|
||||||
|
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.instance = ListFieldModel(list_field=["abc"])
|
||||||
|
|
||||||
|
class TestSerializer(serializers.ModelSerializer):
|
||||||
|
list_field = serializers.AppendListField(child=serializers.CharField)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = ListFieldModel
|
||||||
|
fields = ('list_field')
|
||||||
|
self.serializer = TestSerializer
|
||||||
|
|
||||||
|
def test_adding_data_without_instance(self):
|
||||||
|
serializer = self.serializer(data={"list_field":["bb"]})
|
||||||
|
new_instance = serializer.save()
|
||||||
|
self.asserEqual(new_instance.list_field,["bb"])
|
||||||
|
|
||||||
|
def test_adding_data_without_instance(self):
|
||||||
|
serializer = self.serializer(instance=self.instance,data={})
|
||||||
|
new_instance = serializer.save()
|
||||||
|
self.asserEqual(new_instance.list_field,["abc"])
|
||||||
|
|
||||||
|
def test_adding_data_and_instance(self):
|
||||||
|
serializer = self.serializer(instance=self.instance,data={"list_field":["bb"]})
|
||||||
|
new_instance = serializer.save()
|
||||||
|
self.asserEqual(new_instance.list_field,["abc","bb"])
|
Loading…
Reference in New Issue
Block a user