具有动态名称的 Django 模型字段

2024-04-12

我想通过一种常见的 mixin 或抽象模型向现有模型添加新的 CharFields,但这些字段的名称取决于配置。因此,一个模型将具有 someprefix1_title 字段,而另一个模型将具有 someprefix2_title 字段。

是否有可能使这种方法发挥作用:

class AbstractModel(models.Model):
    self.fields_prefix + '_title' = models.CharField(max_length=255, blank=True, default='')

    class Meta:
        abstract = True

class ModelOne(AbstractModel):
    fields_prefix = 'someprefix1'
    id = models.AutoField(primary_key=True)

class ModelTwo(AbstractModel):
    fields_prefix = 'someprefix2'
    id = models.AutoField(primary_key=True)

所以 ModelOne 可以有字段 id 和 someprefix1_title。

upd:使用 add_to_class() 进行猴子修补怎么样?它会起作用还是它是反模式并且不应该使用?


尝试使用工厂模式来设置您的不同版本AbstractModel.

通过这种方法,您可以更严格地控​​制方式AbstractModel通过工厂函数修改dynamic_fieldname_model_factory.

我们也不修改ModelOne or ModelTwo在他们的定义之后——其他解决方案指出这有助于避免可维护性问题。

模型.py:

from django.db import models


def dynamic_fieldname_model_factory(fields_prefix):
    class AbstractModel(models.Model):

        class Meta:
            abstract = True

    AbstractModel.add_to_class(
        fields_prefix + '_title',
        models.CharField(max_length=255, blank=True, default=''),
    )
    return AbstractModel


class ModelOne(dynamic_fieldname_model_factory('someprefix1')):
    id = models.AutoField(primary_key=True)


class ModelTwo(dynamic_fieldname_model_factory('someprefix2')):
    id = models.AutoField(primary_key=True)

这是此代码生成的迁移:

# Generated by Django 2.1.7 on 2019-03-07 19:53

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='ModelOne',
            fields=[
                ('someprefix1_title', models.CharField(blank=True, default='', max_length=255)),
                ('id', models.AutoField(primary_key=True, serialize=False)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='ModelTwo',
            fields=[
                ('someprefix2_title', models.CharField(blank=True, default='', max_length=255)),
                ('id', models.AutoField(primary_key=True, serialize=False)),
            ],
            options={
                'abstract': False,
            },
        ),
    ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有动态名称的 Django 模型字段 的相关文章

  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • Django 模型:默认日期时间未转换为 SQL CURRENT_TIMESTAMP

    我正在使用 Django 模型创建 PostgreSQL DB 我有一个 DateTimeField 我想将当前时间戳设置为默认值 我知道有多个消息来源建议如何做到这一点 但是 当我在 Django 之外检查数据库时 默认时间戳不会显示 我
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • JQuery:将 FormData 和 csrf 令牌一起发布

    Is the data 下面的行正确吗 我想将表单数据和 csrf 令牌发布到 Django 视图函数 file upload on change function var currentpath window location pathn
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • JavaScript 箭头函数声明中括号的使用

    在 ES6 ES2015 中 箭头函数可以在参数周围带或不带括号的情况下声明 ie var foo 1 myVar gt return myVar 1 or var foo 2 myVar gt return myVar 2 我想知道的是
  • D3.js 的 Python 等效项

    谁能推荐一个可以做到这一点的Python库交互的图形可视化 我特别想要类似的东西d3 js https d3js org 但对于python理想情况下它也是 3D 的 我看过 NetworkX https networkx readthed
  • 如何从文件名中提取一个下划线分隔的字段?

    我有一个文件名列表 如下所示 REG 2016120200hourly d01 20161202 00 00 00 nc 我想提取这个名称并将其放入一个变量中 1 日期20161202 for file in path do filenam
  • Squid - 监听多个端口并转发到不同的代理

    我想设置一个侦听多个端口的代理 每个端口将请求转发到不同的代理 例如 LISTEN FORWARD TO 1 2 3 4 3128 gt 5 6 7 8 3128 1 2 3 4 3129 gt 5 6 7 9 3128 1 2 3 4 3
  • iPhone 应用程序支持哪些字体? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在这里找到了 iPhone 支持的字体列表 http daringfireball net misc 2007 07 iphone osx font
  • 为什么 Java EE 具有可扩展性?

    我从各种来源听说 Java EE 具有高度可扩展性 但对我来说 似乎永远无法将 Java EE 应用程序扩展到谷歌搜索引擎或任何其他大型网站的水平 我想听听它具有如此可扩展性的技术原因 Java EE 被认为是可扩展的 因为如果您考虑 EJ
  • 在 Android 2.x 中获取 ActionBarSherlock actionBarSize

    我正在使用 ActionBarSherlock 此 XML 行在 Android 2 x 中崩溃 android layout height android attr actionBarSize 有没有办法获取 ABS 的 ActionBa
  • Flutter Webview - 在浏览器或窗口中打开外部链接

    我有一个使用 Flutter Webview 制作的 Android 应用程序 当用户单击外部链接时 我希望该链接在浏览器中打开 我该怎么做 事实上 像 Instagram 那样在窗口中打开外部链接会很好 有没有办法做到这一点 Edit w
  • 具有两个参数的自定义 Liquid 标签

    如何编写 调用带有两个参数的自定义 Liquid 标签 上下文 Jekyll 2 1 1 我有一些页面作为选项卡集呈现 我的页面前部允许为某些页面定义额外的选项卡 如下所示 blah blah extra tabs A page a pag
  • 我可以使用JS序列化当前的DOM吗?

    我想使用 javascript 将 DOM 树的当前状态序列化为字符串 虽然我更喜欢 html 但结果格式并不重要 是否有捷径可寻 作为记录 我想使用 PhantomJs 自动下载页面 使用 js 脚本操作它 并保存页面的当前状态 但不是图
  • 减去 r 中的时间

    我有一个包含两个时间变量的数据集 EndVisitTime and BoxTime 我每天都会制作数据集 因此这些观察结果都是在一天内进行的 Date lt 2014 8 12 EndVisitTime lt c 00 00 32 00 0
  • Pandas:如果字符串存在于几列中的任何一列中,我想对计数进行求和,并将该计数添加到具有搜索术语的另一个数据框中

    我有一个视频数据框 其中包含几列标签 字符串 如下所示 import pandas as pd videos 1 cool video drama horror 2 great video sports drama 3 super vide
  • Flutter - 如何下载视频并将其保存到内部存储?

    我正在 flutter 中开发一个项目 我需要实现从服务器下载视频功能 我正在考虑使用 Dio 库并将下载的视频保存到getApplicationDocumentsDirectory 但我还没有找到我想要实现的目标的示例 我尝试了一些示例并
  • 什么是守护进程?它们的实际用途是什么?与php一起使用?

    有人能用两个词解释一下什么是守护进程以及它们在 php 中的用途吗 我 知道这是一个进程 一直在运行 但我不明白它在 php 应用程序中有什么用 有人可以给出使用示例吗 我可以使用守护进程来减少应用程序的内存使用量吗 据我了解 守护进程可以
  • 在 Scala 中模拟可变参数模板

    假设你想要类似的东西可变参数模板 http en wikipedia org wiki Variadic Templates 为泛型类定义 n 个类型参数的能力 在 Scala 中 例如你不想定义Tuple2 T1 T2 and Tuple
  • jQuery 可排序/禁用选择问题

    我的 jQuery 可排序列表出现问题 其中文本被选中 我发现了这个功能disableSelection 但似乎无法让它发挥作用 这是js ul current projects sortable placeholder drop zone
  • 如何在 Asp.net C# 中使用 LDAP 在 Active Directory 中搜索用户

    如何在 asp net c 中从 Active Directory 服务器获取所有记录 在中创建连接字符串LDAP提供username and Password可以与服务器通信并具有管理员权限 假设直流电是me com and userna
  • 当c#程序崩溃时如何知道原因?

    我的程序经常因某种原因崩溃 在这种情况下 我确实看到带有 关闭 按钮的 Windows 消息 每次发生这样的事情我都非常想知道到底发生了什么 感谢社区 我已经知道如何 处理 某些情况 我在程序的开头添加了这样的代码 static void
  • 在简单的 CSS 工具提示上淡入和淡出

    新手问题 尝试制作一个简单的 css 工具提示来淡入和淡出 但无法使其工作 搜索了很多但找不到简单的答案 我假设我把过渡 css3 放在错误的地方 但它在其他地方也不起作用
  • 具有动态名称的 Django 模型字段

    我想通过一种常见的 mixin 或抽象模型向现有模型添加新的 CharFields 但这些字段的名称取决于配置 因此 一个模型将具有 someprefix1 title 字段 而另一个模型将具有 someprefix2 title 字段 是