Django - 自定义模型保存方法不显示属性值

Posted

技术标签:

【中文标题】Django - 自定义模型保存方法不显示属性值【英文标题】:Django - custom model save method doesn't show attributes values 【发布时间】:2021-06-04 11:56:18 【问题描述】:

在尝试保存模型实例时,我无法访问自定义 save() 方法中的属性值。我认为这应该是可能的,就像docs 状态一样。这是我的代码的样子:

class ModelName(models.Model):
    attribute1 = models.ManyToManyField("app.ModelName2", related_name="model_name_2")
    attribute2 = models.ForeignKey("app.ModelName3", related_name="model_name_3")

    def save(self, *args, **kwargs):
        super().save()
        print(self.attribute1.all()) # <---- it prints an empty qs, but in reality there are instances passed to attribute1 field.

有人知道为什么会这样吗?我很确定我错过了一些非常明显的东西。提前致谢!

【问题讨论】:

这些实例是在 after 调用 save 之后添加的,因为您的模型实例需要在添加此类相关实例之前有一个 pk,因为 m2ms 存储在一个额外的 intermediate 数据库表。 好的,这似乎是一个问题,如果我想例如基于 ModelName.attribute1 值创建其他模型,你能告诉我正确的方法是什么吗? 这能回答你的问题吗? Django: accessing ManyToManyField objects after the save 不幸的是,当在接收器中使用 models.signals.m2m_changed 时,该函数甚至没有被调用,而在使用 models.signals.post_save 时,它​​被调用了 2 次并且都有一个空查询集:( 更新:m2m_changed 需要将发件人设置为 ModelName.attribute1.through,而我试图将其仅设置为 ModelName。现在我可以正常访问qs了!感谢您的帮助,您可以发布答案以便我接受吗? 【参考方案1】:

哪个App里面创建这个模型,你必须在setting.py中安装App

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '<your_app_name>'
]
AUTH_USER_MODEL = '<app_name>.<model_name>

'

【讨论】:

谢谢,但这根本不是问题,该应用程序存在于 INSTALLED_APPS 中。

以上是关于Django - 自定义模型保存方法不显示属性值的主要内容,如果未能解决你的问题,请参考以下文章

django 在模型自定义保存中访问上传的文件,最佳实践?

Django Admin后台管理

模型表单上的 Django 自定义设置大小属性不起作用

添加自定义按钮以链接到另一个模型 Django Admin

在 django 模型自定义 save() 方法中,你应该如何识别一个新对象?

从显示自定义字段的 Django 模型呈现可排序表的最佳方法?