python - 如何用其他值 django 模型覆盖默认值
问题描述
我对 django 有疑问。在我的模型中,我有一个 JSON 字段,默认存储一个空列表。当尝试将值附加到该列表时,这不起作用。无论它是另一个对象还是字符串。去田野,那时还是空的。我将不胜感激任何帮助。提前致谢。
模型.py
followers = models.JSONField(default={
"followers": []
})
(“关注者”字段在客户端类中)
视图.py
current_user = Client.objects.get(id=response.user.id)
current_user.followers["followers"].append("Some Name")
解决方案
这里有两个问题。首先,您需要将对象保存到数据库中。此外{"followers": []}
,默认使用不是一个好主意。正如JSONField 上的文档所说:
如果您为该字段提供默认值,请确保它是可调用的,例如
dict
(对于空默认值)或返回 dict 的可调用(例如函数)。错误使用default={}
会创建一个可变的默认值,该默认值在 JSONField 的所有实例之间共享。
因此,您应该定义一个将创建(新)字典的函数,例如:
def default_followers():
return {'followers': []}
class MyModel(models.Model):
# …
followers = models.JSONField(default=default_followers)
如果要实现追随者-追随者模型,则不应使用 JSONField,而应使用ManyToManyField
,因为关系数据库已针对此类表进行了优化,并且可以保证引用完整性。
推荐阅读
- haskell - Haskell 中 Equals 的基本实现
- powershell - 使用PowerShell匹配比较多个电子邮件地址
- javascript - How to handle AJAX when PHP code fails but sends 200?
- python - 如何在不改变段顺序的情况下打乱数据段?
- r - 如何在 R 中创建一个循环或函数来选择所需的数据?我的数据存储为列表
- javascript - django-leaflet + leaflet-rastercoord (macOS 10.13.6 + homebrew)
- multithreading - CGAL 2D 正则化布尔集操作 lib 线程安全吗?
- typescript - 打字稿:调用函数时如何要求类型规范?
- python - 如何使用 matplotlib 在 python 中绘制 3D 权重函数
- javascript - 用于匹配括号中字符串的正则表达式,包括缺少左括号或右括号时