跳转到主要内容

DRF库,可以将资源属性作为字典操作

项目描述

drf-madprops 构建状态

DRF库,提供了操作资源属性列表的辅助工具,作为字典

由Yola团队编写和使用,以支持我们的免费网站构建器

概述

这是关系型数据库中常见的场景,当某些表(例如User)通过从属键值表(例如UserPreference)扩展时。这允许动态地向User添加/删除字段(存储在UserPreference中)。通常这些属性模型结构非常简单,例如

class UserPreference(models.Model):
    id = models.AutoField()
    user = models.ForeignKey(User, related_name='preferences')
    name = models.CharField()
    value = models.CharField)

但是通过标准的DRF序列化器公开/操作它们并不方便。我们可能会得到如下内容

[
    {"id": "id1", "user": "user1", "name": "property1", "value": "value1"},
    {"id": "id2", "user": "user1", "name": "property2", "value": "value2"}
    ...
]

此库包含两个属性序列化器的基类(对于属性作为单独的资源公开和作为嵌套资源公开的情况),允许检索/操作父资源属性作为字典。例如,而不是上面的表示,我们将得到如下内容

{
    "property1": "value1",
    "property2": "value2",
    ...
}

使用方法

附加元选项

  • read_only_props:无法通过序列化器更改的属性名称列表。
  • json_props:属性名列表,其值以JSON格式存储。序列化器在转换为表示时将使用json.loads()处理这些值,在保存之前将使用json.dumps()

作为嵌套序列化器

from madprops.serializers import NestedPropertySerializer, PropertiesOwnerSerializer


class PreferenceSerializer(NestedPropertySerializer):
    class Meta:
        model = Preference
        read_only_props = ('user_token', 'tutorial_email_sent')
        json_props = ('packages',)


class UserSerializer(PropertiesOwnerSerializer):
    preferences = PreferenceSerializer(many=True, required=False)

作为用于属性端点的序列化器

from madprops.serializers import PropertySerializer


class PreferenceSerializer(PropertySerializer):
    class Meta:
        model = Preference
        read_only_props = ('user_token', 'tutorial_email_sent')


class PreferencePrivateViewSet(ModelViewSet):
    serializer_class = PreferenceSerializer
    paginate_by = None

测试

使用以下命令运行测试

tox

或者安装开发需求,然后使用以下命令运行测试

pip install -r requirements.txt
pytest tests

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

drf-madprops-1.1.0.tar.gz (6.2 kB 查看哈希值)

上传时间:

支持