繁体   English   中英

我怎样才能 map 一个 django model 到一个 python 数据类

[英]How can I map a django model to a python dataclass

github 中曾经有一个项目允许您将 map django 模型转换为 Z23EEEB4347BDD26BFC6B7EE,但现在它的数据类已经消失了。 您仍然可以使用回程机器检查它:

https://web.archive.org/web/20201111163327/https://github.com/proofit404/mappers https://web.archive.org/web/20201101163715/https://proofit404.github.io/mappers /

我正在尝试找到另一种方法将 map django 模型转换为 python 数据类,但我似乎找不到任何类似的项目

解决方案1(首选方式,支持自定义数据类型,双向映射):

在 Django 模型中使用 Python 数据类检查我的答案

解决方案2:

可以使用这里实现的装饰器来完成:

from django.db import models
from dataclasses import dataclass

# you can copy this decorator and use it or implement your own
def with_dataclass_mapper(dataclass):
    def wrapper(cls):
        def mapper(self):
            dataclass_kwargs = {}
            for field in dataclass.__dataclass_fields__:
                dataclass_kwargs[str(field)] = getattr(self, str(field))
            return dataclass(**dataclass_kwargs)
        # add 'map' method to class
        setattr(cls, 'map', mapper)
        return cls
    return wrapper

例子:

@dataclass
class MyDataclass:
    field1: str
    field2: str

@with_dataclass_mapper(MyDataclass)
class MyModel(models.Model):
    field1 = models.CharField(default="", max_length=255)
    field2 = models.CharField(default="", max_length=255)

modelInstance = MyModel(field1="foo", field2="bar")
myDataclassInstance = modelInstance.map()

注意:

  • 此解决方案要求还应在 Model 中定义 Dataclass 字段
  • 我只使用字符串字段测试了这个解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM