mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-30 18:09:59 +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:
|
||||
"""
|
||||
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 pytz
|
||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||
from django.db import models
|
||||
from django.http import QueryDict
|
||||
from django.test import TestCase, override_settings
|
||||
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