如何用其他值django模型覆盖默认值

jw5wzhpr  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(401)

我对django有意见。在我的模型中,我有一个json字段,它默认存储一个空列表。当尝试将值附加到该列表时,这不起作用。不管它是另一个对象还是字符串。去田野的时候,它还是空的。我将感谢任何帮助。提前谢谢。
models.py

followers = models.JSONField(default={
    "followers": []
})

(followers字段位于client类中)
views.py

current_user = Client.objects.get(id=response.user.id)
current_user.followers["followers"].append("Some Name")
kyxcudwk

kyxcudwk1#

这里有两个问题。首先,需要将对象保存到数据库中。进一步的MOR3E使用 {"followers": []} 因为默认不是一个好主意。正如jsonfield上的文档所述:
如果为该字段提供默认值,请确保它是可调用的,例如 dict (对于空默认值)或返回dict的可调用项(如函数)。错误使用 default={} 创建一个可变的默认值,该默认值在jsonfield的所有示例之间共享。
因此,您应该定义一个创建(新)字典的函数,如:

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

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

如果您想要实现一个followee模型,您不应该使用jsonfield,而应该使用 ManyToManyField ,因为关系数据库经过优化,可以处理这样的表,它将保证引用完整性。

相关问题