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

jac*_*zil 3 django django-models django-admin django-modeladmin

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

当我将下面模型中的所有字段设置为只在管理员中读取时,前端显示看起来像底部的图像.它看起来像是应该有一个价值或一个盒子或东西.如果没有一种简单的方法来完成我正在寻找的东西,那么还有另一种解决方案可以让前端管理员更清楚地为用户服务吗?

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)
Run Code Online (Sandbox Code Playgroud)

显示管理员的字段截图: 带有readonly包字段的admin的屏幕截图

jul*_*ria 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..
Run Code Online (Sandbox Code Playgroud)

  • 文档说..."除非你有一个很好的理由,否则避免在基于字符串的字段(例如CharField和TextField)上使用null.如果基于字符串的字段具有null = True,则表示它有两个可能的"无数据"值: NULL和空字符串.在大多数情况下,为"无数据"提供两个可能的值是多余的; Django约定是使用空字符串,而不是NULL." | 请参阅:https://docs.djangoproject.com/en/dev/ref/models/fields/#null | 在我看来,前端管理显示不足以成为数据集规范化的消息.你的意见? (2认同)