• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

barseghyanartur / django-rest-framework-tricks / 3680627646

pending completion
3680627646

push

github

Artur Barseghyan
Up docs

170 of 190 relevant lines covered (89.47%)

4.47 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/rest_framework_tricks/helpers.py
1
from copy import deepcopy
×
2
from typing import List, Dict, Any
×
3

4
__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
×
5
__copyright__ = "2017-2022 Artur Barseghyan"
×
6
__license__ = "GPL-2.0-only OR LGPL-2.1-or-later"
×
7
__all__ = (
×
8
    "get_nested_data_field_names",
9
    "flatten_nested_data",
10
)
11

12

13
def get_nested_data_field_names(serializer) -> List[str]:
×
14
    """Get nested data field names."""
15
    nested_field_names = []
×
16
    for field_name, field in serializer.fields.items():
×
17
        if getattr(field, "Meta", None) and getattr(
×
18
            field.Meta, "nested_proxy_field", False
19
        ):
20
            nested_field_names.append(field_name)
×
21
    return nested_field_names
×
22

23

24
def flatten_nested_data(
×
25
    validated_data: Dict[str, Any], nested_field_names: List[str]
26
) -> Dict[str, Any]:
27
    """Flatten nested data.
28

29
    Usage example:
30

31
        class MySerializer(serializers.ModelSerializer):
32

33
            def create(self, validated_data):
34
                # Do something else
35
                nested_field_names = get_nested_field_names(self)
36
                validated_data = flatten_nested_data(
37
                    validated_data, nested_field_names
38
                )
39
                return super().create(validated_data)
40
    """
41
    validated_data = deepcopy(validated_data)
×
42
    for field_name in nested_field_names:
×
43
        data = validated_data.pop(field_name, None)
×
44
        if data:
×
45
            validated_data.update(data)
×
46
    return validated_data
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc