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 - 自定义模型保存方法不显示属性值的主要内容,如果未能解决你的问题,请参考以下文章