0

我的 models.py 文件中有一个 BooleanField。

我希望它对所有管理员/超级用户默认为 True,而我希望它对所有其他用户默认为 False。

为此,我不想在我的 html 中使用 if-else 模板标签,我希望得到一个更干净的解决方案。

就像是:

field_name = models.BooleanField(
if author.is_superuser:
    default = True
else:
    default=False
)

任何帮助表示赞赏。这里的作者是模型类“Post”的作者。

编辑1:我需要的user.is_superuser实际上是作者的用户。我需要验证博客文章的作者是否是超级用户,然后为布尔字段分配默认值。

4

1 回答 1

0

您在模型定义中没有任何“当前用户”的概念。但是您确实可以访问视图中的当前用户(as request.user),因此您可以在那里使用它来为您的字段传递正确的初始值

举个例子(使用基于函数的视图):

def myview(request, ....):
    if request.method == "POST":
        # ...
    else:
        form = YourModelForm(initial={"field_name": request.user.is_superuser})

编辑

我不需要用户,而是作者的用户

我能说什么?如果您想要更好的答案,请写出更好的问题- 您没有在问题中添加任何上下文,甚至没有在模型的相关部分中添加任何内容。

话虽如此,模型字段默认值仅在两种情况下使用:创建新实例时,以及将新字段添加到现有模型时。

在第一种情况下,您的Article或任何模型实例尚不存在,因此它还不能有“作者”。IOW “作者”要么是请求用户(最常见的情况,很可能是您的),要么是您明确提供的其他用户。在这两种情况下,您确实手头有正确的用户实例,并且我上面的回答适用(按原样或通过一些您应该能够自己完成的调整)。

在第二种情况下,这就是您处理数据迁移的事情,非常简单。

于 2020-04-08T13:26:56.620 回答