在 Django Admin 中“通过”内联保存 M2M

2024-04-06

显然,如果 ManyToManyField 有中间表,Django 的 ModelAdmin/ModelForm 不允许您使用 save_m2m() 。

模型.py:

from django.db import models


def make_uuid():
    import uuid
    return uuid.uuid4().hex


class MyModel(models.Model):
    id = models.CharField(default=make_uuid, max_length=32, primary_key=True)
    title = models.CharField(max_length=32)
    many = models.ManyToManyField("RelatedModel", through="RelatedToMyModel")

    def save(self, *args, **kwargs):
      if not self.id:
        self.id = make_uuid()
      super(GuidPk, self).save(*args, **kwargs)


class RelatedModel(models.Model):
    field = models.CharField(max_length=32)


class RelatedToMyModel(models.Model):
    my_model = models.ForeignKey(MyModel)
    related_model = models.ForeignKey(RelatedModel)
    additional_field = models.CharField(max_length=32)

管理员.py:

from django import forms
from django.contrib import admin

from .models import MyModel


class RelatedToMyModelInline(admin.TabularInline):
    model = MyModel.many.through


class MyModelAdminForm(forms.ModelForm):
    class Meta:
        model = MyModel


class MyModelAdmin(admin.ModelAdmin):
    form = MyModelAdminForm
    inlines = (RelatedToMyModelInline, )


admin.site.register(MyModel, MyModelAdmin)

如果我先保存 MyModel,然后通过内联添加一个新的相关模型,它工作正常,但如果我尝试设置内联,同时还为新的 MyModel 添加数据,我会收到 Django 管理错误“请更正下面的错误。 ”下面没有突出显示任何内容。

如何让它保存 MyModel,然后保存内联中间模型?显然 Django 可以在保存 MyModel 后保存直通模型 - 所以我只是在寻找一个挂钩。我尝试在调用instance.save()后通过调用save_m2m()来覆盖表单的save()方法,但显然这对于​​带有直通表的M2M不起作用。

我使用的是 Django 1.2,但这在 1.3 中仍然是一个问题。

UPDATE:好吧,我做了一个像上面这样的测试应用程序来隔离问题,看起来它按预期工作,在保存 MyModel 对象后正确保存 M2M 中间对象...只要我让 Django 自动创建 MyModel.id 字段跑步时python manage.py syncdb- 一旦我添加了 GUID id 字段,它就不再起作用了。

这听起来越来越像 Django bug。


在 MyModelAdmin 中,您可以尝试覆盖 save_formset 方法。这样您就可以选择保存的顺序。

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

在 Django Admin 中“通过”内联保存 M2M 的相关文章

  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 在 Django 中定期运行一个函数

    我在 Django 中编写一个应用程序来监视一组服务器中的某些服务 我希望定期更新观点 到目前为止 我已经研究过编写自定义管理命令 链接在这里 http docs djangoproject com en dev howto custom
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • SpringBoot Undertow:如何分派到工作线程

    我目前正在查看 springboot undertow 对我来说 不太清楚如何将传入的 http 请求分派到工作线程以阻止操作处理 看着班级Undertow 嵌入式 Servlet Container class 看起来没有办法实现这种行为
  • 如何从PDO PHP 中的prepare() 获取查询错误?

    st db gt prepare SELECT FROM c6ode 在上述情况下 如何检查查询的故意 mysql 错误 需要设置错误模式属性PDO ATTR ERRMODE to PDO ERRMODE EXCEPTION 因为您期望异常
  • C 中 scanf 函数的格式说明符中 %c 规范之前的空格

    当我之间不包含空格时 d and c格式字符串中的规范scanf 在以下程序中运行函数 并在运行时输入 4 h 则输出为 Integer 4 and Character 究竟如何可变 c 在这种情况下接受输入 如果我在之间包含空格 会有什么
  • 在Google搜索时如何从第一页获取图像?

    通常使用Google搜索城市后 右侧会出现维基百科页面的一部分 其中包含图像和地图 谁能告诉我如何访问该图像 我应该知道怎么下载 实际上 主图像 与右侧地图图像一起 很少来自维基百科 因此您无法使用维基百科 API 来获取它 如果您想访问实
  • 在 GridView 或 ListView 底部添加额外空间

    是否可以在 GridView 底部添加额外的空间 有点像空行 我希望当你向下滚动到 GridView 底部时 会有额外的 50dp 的空白空间 我尝试设置paddingBottom到50dp 但似乎没有改变任何东西 如果我理解正确的话 它应
  • Grails - SpringSecurityPlugin 不生成控制器

    我是 Grails 新手 我按照说明安装 SpringSecurityPlugin 版本 2 0 RC2 并执行命令 grails s2 quickstart 用户角色 应该在其他文件中生成 登录控制器 and 注销控制器 但这些控制器不会
  • Kafka - 如何捕获kafka客户端后台线程生成的消息

    使用以下配置来模拟消费者关闭 会话超时 我们如何捕获客户端记录到控制台的消息 SESSTMOUT rdkafka consumer 1 第三 主要 consumed message None msg1 0 first topic 0 Non
  • 如何让编译日志在Emacs中创建一个新窗口?

    如果我在 emacs 中只显示一个窗口并使用 M x 编译 则该窗口会一分为二 我可以轻松查看编译缓冲区 但是 如果我显示更多窗口 编译日志就会接管其他窗口之一 这让我感到恼火 如何让emacs始终分割一个新窗口来显示编译日志 编辑 从我一
  • 主要和次要刻度线风格不同,整个页面覆盖D3?

    我想绘制一个带有主要和次要刻度的轴 以不同的方式覆盖我的整个页面 我遵循的结构this https stackoverflow com questions 19242674 major and minor ticks with v3 of
  • 访问数据转换问题

    我正在使用 Access 2003 有一个表 其中文本数据列中包含一些日期值 如下所示 May 97 Jun 99 Jun 00 Sep 02 Jan 04 我需要将它们转换为正确的日期格式并转换为另一个日期 时间列 因此创建一个新的日期
  • 使用 WiX 进行重大升级后无法启动 Windows 服务

    我有一个非常简单的 WiX 项目 没有什么花哨 当尝试对现有安装执行 MajorUpgrade 时 无法启动服务 并且不可避免地会回滚到以前的版本并正常启动服务 我已经删除了Start install 并成功手动启动应用程序 所以我知道这不
  • [__NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法

    id init if self super init NSMutableArray listname NSMutableArray alloc initWithObjects cu al zn au ru fu rb pb wr nil N
  • 动画后接收指针事件的链接在 Safari 中不可点击

    我正在使用 CSS 为文本添加动画 其中元素一个接一个地出现 首先尝试一下看看我的意思 wrapper pointer events none remove pointer events from elements before they
  • 加载文件量角器失败 - 失败:脚本超时:11 秒内未收到结果

    我尝试执行使用量角器上传文件的测试时出错 我的代码是这个 it it should be possible to upload a file function browser get buildUrl popupEnvironment el
  • 设置Flex Slider轮播图片的显示量

    我在我的网站上嵌入了带有轮播的柔性滑块 但是 我没有很好地设置滑块的属性 或者可能是CSS 它是这样的 http www screencast com t xlRssnj43 http www screencast com t xlRssn
  • tcplistener绑定所有本地地址?

    我正在使用一个服务器应用程序 我将地址绑定到 127 0 0 1 直到我想从虚拟机内的客户端进行连接时 一切都很好 所以我将它绑定到 192 现在我的测试全部连接到 127 无法连接 我知道我可以使用 Any 但我不想连接外部互联网 我知道
  • Windows Phone 8 绑定到具有格式的字符串资源

    我的本地化资源字符串 名为TextResource具有以下值 Text 0 Where 0 是 String Format 的占位符 我的用户控件有一个名为 DependecyPropertyCount 我想绑定Count到文本框的文本 还
  • 发送包含数据框作为弹性表的电子邮件

    我有一个每天用来发送邮件的代码 我使用 xtable 包来完成它 但最近 我已经习惯使用弹性表 因为它更符合我的要求 但是当我更改代码以使用 flextable 函数时 我发送的只是一封没有正文的空白邮件 这是示例数据集 samplemon
  • 让我的用户脚本等待其他脚本加载

    Edit 我将用一个演示问题的简化示例来替换原来的 令人困惑的问题 背景 我正在尝试编写一个将在 Chrome 中运行的用户脚本 该脚本需要调用 JavaScript 函数AlertMe 它位于用户脚本之外 此函数是页面的一部分 包含在服务
  • 在 Django Admin 中“通过”内联保存 M2M

    显然 如果 ManyToManyField 有中间表 Django 的 ModelAdmin ModelForm 不允许您使用 save m2m 模型 py from django db import models def make uui