首页 > 解决方案 > 如何用其他值 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")

标签: pythondjangodjango-models

解决方案


这里有两个问题。首先,您需要将对象保存到数据库中。此外{"followers": []},默认使用不是一个好主意。正如JSONField 上的文档所说

如果您为该字段提供默认值,请确保它是可调用的,例如dict(对于空默认值)返回 dict 的可调用(例如函数)。错误使用default={}会创建一个可变的默认值,该默认值在 JSONField 的所有实例之间共享。

因此,您应该定义一个将创建(新)字典的函数,例如:

def default_followers():
    return {'followers': []}

class MyModel(models.Model):
    # …
    followers = models.JSONField(default=default_followers)

如果要实现追随者-追随者模型,则不应使用 JSONField,而应使用ManyToManyField,因为关系数据库已针对此类表进行了优化,并且可以保证引用完整性。


推荐阅读