4

当没有值时,是否有 Djangotastic 方法可以在管理员中显示字段的默认值?像'n/a',但不保存到数据库?

当我在管理员中将下面模型中的所有字段设置为只读时,前端显示看起来像底部的图像。它在视觉上感觉崩溃了,就像它应该有一个值或一个盒子或其他东西一样。如果没有一种简单的方法来做我正在寻找的事情,那么是否有另一种解决方案可以让前端管理员对用户更清楚?

class Package(models.Model):
    packaging_format = models.CharField(max_length=40)
    package_delivery_pattern = models.CharField(max_length=30, blank=True)
    package_delivery_comments = models.CharField(max_length=250, blank=True)
    package_manifest_filename = models.CharField(max_length=50)
    package_description = models.CharField(max_length=250, blank=True)
    package_naming_pattern = models.CharField(max_length=50)

管理中显示的字段屏幕截图: 带有只读包字段的管理员屏幕截图

4

2 回答 2

5

发生的事情是您实际上''在 CharFields 中保存了一个空字符串而不是None值(因为blank=True)。所以 Django-admin 正在显示您保存在数据库中的字符串(在这种情况下,什么都没有)。

如果您将 CharFields 更改为null=True而不是blank=True,您将保存NULL在数据库中而不是空字符串。这样,您将获得所需的行为。

编辑:我知道不推荐使用此解决方案(遵循 Django Docs),但这是您想要的行为。Django-admin 只是向您显示数据库中的字符串,即''.

我想到的另一个解决方案是为您的Package模型修改 ModelAdmin,例如:

class PackageAdmin(admin.ModelAdmin):
    readonly_fields = ['show_package_delivery_pattern', ...]

    def show_package_delivery_pattern(self, obj):
        if obj.package_delivery_pattern:
            return obj.package_delivery_pattern
        else:
            return 'N/A'
    # same with all your CharFields..
于 2011-11-21T17:34:29.797 回答
2

从 Django 1.9 开始,您可以empty_value_display在 Django 管理员中的站点、模型或字段级别使用。在模型级别:

class YourModelAdmin(admin.ModelAdmin):
    empty_value_display = '---'
于 2019-08-08T17:25:13.100 回答