Django admin 保存对象的副本而不是覆盖

2023-12-06

我有一个名为 OneToOneFiled 的模型alg_id,当我进入管理面板并更改现有对象中的此字段时,就会创建一个新对象,但我想用不同的对象覆盖相同的对象alg_id。 当我更改其他简单文本字段时 - 一切正常。 如果我改变alg_id对于一个,已经存在于数据库中,然后该对象被覆盖 - 如果我在这里收到警告会更好..

我怎样才能做到这一点?

附注本项目使用 Django 2.2.6 版本

models.py :

from django.db import models
from django.utils.translation import gettext_lazy as _

class AchievementInfo(models.Model):

    GROUPS = (
        ('Results', 'Results'),
        ('Service', 'Service'),
        ('Team', 'Team'),
        ('Development', 'Development')
    )

    algorithm_id = models.OneToOneField(
        'core.Algorithms',
        models.DO_NOTHING,
        verbose_name=_('Alg id'),
        primary_key=True,
    )
    role_key = models.CharField(_('Role'), max_length=25)
    group = models.CharField(_('Group'), max_length=50, choices=GROUPS)
    name = models.CharField(_('Name'), max_length=100)
    web_name = models.CharField(_('Shown name'), max_length=75)

    class Meta:
        db_table = 'achievements_guide'
        default_permissions = ()
        ordering = ('web_name', 'role_key', 'algorithm_id')
        verbose_name = _('Achievement')
        verbose_name_plural = _('Achievements')

    def __str__(self):
        return f'{self.algorithm_id}: {self.name}, {self.web_name}, {self.role_key}'

admin.py:

from django.contrib import admin
from achievements.models import AchievementInfo

@admin.register(AchievementInfo)
class AchiAdmin(admin.ModelAdmin):
    list_display = ("web_name", "group", "role_key", "algorithm_id")
    list_filter = ("web_name", "role_key")  
    raw_id_fields = ("algorithm_id", )

Django 仅通过以下方式跟踪您尝试编辑或添加的对象:primary_key。如果新设置的主键与数据库中的某个对象匹配,则在保存新创建的对象时,该对象将被替换。同样,如果您更改主键并保存对象,Django 将不会更新旧的,而是创建新的(或替换新匹配的,如果适用)。

当您使用您的OneToOneField作为对象的主键,在保存对象时如果没有复杂的附加逻辑,就不可能实现您想要实现的目标。

相反,您可以创建附加字段作为主键(或者让 Django 为您完成,不使用primary_key=True模型中的任何字段),因此 Django 可以自行正确跟踪您正在编辑哪个对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django admin 保存对象的副本而不是覆盖 的相关文章

随机推荐

  • WPF。将列表框 itemtemplate 内部绑定到 ObservableCollection 源。源 PropertyChanged 被忽略

    我正在尝试创建一个显示格式化文本的列表框 我希望能够更改代码的格式 为了显示格式化文本 我选择了 TextBlock 并打算使用 TextBlock Inlines 集合进行格式化 TextBlock Inlines 不可绑定 所以我创建了
  • 使用 jQuery 验证 addMethod 设置输入文本的日期格式 dd.mm.yyyy

    我在使用这个 addMethod 来验证输入的日期时遇到了真正的麻烦 它没有正确测试正则表达式 我认为它可能写有错误 日期应采用以下格式 dd mm yyyy 请帮忙 function msgBtn click function var i
  • 动态创建一组 SQLAlchemy 表

    我有一个用 SQLAlchemy 声明定义的简单表 Base declarative base class MyTable Base tablename mytable1 row id Column INT primary key True
  • C++:复制数组

    是否可以在 C 中做这样的事情 现在无法自己测试 int myarray 10 111 222 333 444 555 666 777 888 999 1234 void functioncc int temparray myarray f
  • Windows 安装程序 (wix) 安装产品两次

    我使用 WIX 安装测试产品 使用默认的 wix 设置非常简单 如果我设置产品 id 安装 重建并再次安装 我的程序列表中有两个产品 为什么 我的产品
  • javafx argb 到灰度转换

    我知道有类似的问题 但这些问题并没有回答我的问题 正如标题所示 我正在使用 JavaFXImage类 而不是 bufferedImage 我用了答案this其他问题 但生成的图像是空的 这是我的代码 public static Image
  • Powershell监控多个目录

    注意 运行 PowerShell v3 我目前的目录设置是 ftproot 001 converted ftproot 001 inbound ftproot 001 pdf ftproot 002 converted ftproot 00
  • 使用函数依赖的关联参数限制

    对于给定类型 a 下面的函数 f 采用类型 c 的参数 对于不同类型的 a c 以不同的方式受到限制 具体来说 当 a 是任何整数类型时 c 应该允许是任何 实数 类型 当 a 为 Float 时 c 只能为 Float 一种尝试是 LAN
  • Websphere:web.xml 中的安全约束不起作用

    我想保护单个 jsp 页面免遭匿名访问 我正在尝试通过以下方式做到这一点
  • 有符号整型和无符号整型有什么区别

    有符号整型和无符号整型有什么区别 您可能知道 ints 在内部以二进制形式存储 通常是一个int包含 32 位 但在某些环境中可能包含 16 或 64 位 甚至不同的数字 通常但不一定是 2 的幂 但对于这个例子 我们来看 4 位整数 虽然
  • C# 7 模式匹配语义

    我有两个我认为是相等的代码块 First the if based block 然后完全相同 但转换为切换大小写类型 很抱歉 Resharper 红色波浪标记不好 Resharper 还不明白这一点 基于开关的代码将在第一个时抛出空引用异常
  • Spark 中的 DataFrame orderBy 后跟 limit

    我有一个程序生成一个 DataFrame 它将在其上运行类似的东西 Select Col1 Col2 orderBy ColX limit N 但是 当我最终收集数据时 我发现如果我采用足够大的前 N 个 则会导致驱动程序 OOM 另外另一
  • 从 Outlook 中的特定文件夹导入电子邮件

    我目前正在 Excel 中使用以下代码来访问无人值守的 Outlook 邮箱中的文件夹 而不是我自己的邮箱 但是 有没有一种方法可以在代码中设置文件夹 而不是使用文件夹选择器 Sub Launch Pad Dim olApp As Outl
  • 有没有办法从 GET 请求中删除提交按钮?

    我有一个可以查看的页面photos each photo是在一个album 在页面顶部我有一个albums选择框album id and album name分别
  • CORS 策略已阻止我的子域

    我有一个相同的域 其中一个是没有前缀 www 的域 例如 https www example com https example com 第一个域工作正常 因为它是默认域 但当我执行 CRUD 或访问任何 api 服务时 第二个出现错误 访
  • 无法预览此文件,应用程序可能已崩溃 -- 输入特定代码行时发生

    虽然我在堆栈溢出上四处寻找答案 但感觉我的情况对于这个错误来说是独一无二的 我一直在学习如何在 SwiftUI 中使用 CoreData 来保存持久数据 我首先制作一个基本的电影列表 当您单击 添加电影 按钮时 它会添加带有一些任意文本的电
  • Python:使用 numpy 或 scipy 读取 Fortran 二进制文件

    我正在尝试读取一个 fortran 文件 其标题为整数 然后实际数据为 32 位浮点数 使用 numpy 的fromfile mydatafile dtype np float32 它以 float32 形式读取整个文件 但我需要输出文件的
  • Json.NET,可以扩展SerializeXmlNode来检测数字吗?

    我正在使用以下方法从 XML 转换为 JSONSerializeXmlNode 看起来预期的行为是将所有 XML 值转换为字符串 但我想在适当的情况下发出真实的数值 Input
  • 在 C 中保留前导零 [重复]

    这个问题在这里已经有答案了 我试图在 c 中打印一个整数 但那些以零开头的整数引起了我的问题 例如如果没有 是 01234 它打印像 1234 而不是 01234 请告诉如何在 C 中做到这一点 我的问题是有 2 个整数 我想知道第一个整数
  • Django admin 保存对象的副本而不是覆盖

    我有一个名为 OneToOneFiled 的模型alg id 当我进入管理面板并更改现有对象中的此字段时 就会创建一个新对象 但我想用不同的对象覆盖相同的对象alg id 当我更改其他简单文本字段时 一切正常 如果我改变alg id对于一个