如何在Django管理员中显示没有任何值的值?

时间:2011-11-21 17:28:51

标签: django django-models django-admin django-modeladmin

当没有值时,是否存在在管理中显示默认值的djangtastic方法?像“不适用”,但不是将其保存到数据库中?

当我将以下模型中的所有字段设置为admin中的readonly时,前端显示看起来像底部的图像。它看起来像是应该有一个价值或一个盒子或东西。如果没有一种简单的方法来做我想要的事情,那么还有另一种解决方案可以让前端管理员更清楚地为用户服务吗?

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)

显示为admin的字段的屏幕截图 Screenshot of admin with readonly package fields

2 个答案:

答案 0 :(得分:5)

发生的事情是您实际在CharFields中保存空字符串''而不是None值(因为blank=True)。所以Django-admin显示你在db中保存的字符串(在这种情况下,没有)。

如果您将CharField更改为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..

答案 1 :(得分:0)

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

class YourModelAdmin(admin.ModelAdmin):
    empty_value_display = '---'