可以保存 Django Admin 上的空 ArrayField 吗?
Can an empty ArrayField on Django Admin be saved?
models.py
class BlogArticle(models.Model):
# ...
likers = ArrayField(models.GenericIPAddressField(), default=list)
admin.py
admin.site.register(BlogArticle)
当使用 Django Admin 页面处理带有空列表的文章时,输入为空。这对我来说没问题,但是在保存对象时(例如在编辑其他字段之后),我收到此错误:
它似乎被解释为一个None
值,而当前值实际上是一个有效的空列表。
为什么 Django 会使用相同的方式来表示空列表和管理中的 None 值?我想知道它是不是设计得很糟糕,或者我是否遗漏了什么。
请注意,添加 blank=True
会使情况变得更糟,因为它不会引发任何错误,但会默默地将空列表转换为 None。
我在发帖前弄明白了,但认为它对其他人仍然有用
简单的(对你们大多数人来说可能是显而易见的)解决方案是:
ArrayField(models.GenericIPAddressField(), default=list, blank=True, null=False)
models.py
class BlogArticle(models.Model):
# ...
likers = ArrayField(models.GenericIPAddressField(), default=list)
admin.py
admin.site.register(BlogArticle)
当使用 Django Admin 页面处理带有空列表的文章时,输入为空。这对我来说没问题,但是在保存对象时(例如在编辑其他字段之后),我收到此错误:
它似乎被解释为一个None
值,而当前值实际上是一个有效的空列表。
为什么 Django 会使用相同的方式来表示空列表和管理中的 None 值?我想知道它是不是设计得很糟糕,或者我是否遗漏了什么。
请注意,添加 blank=True
会使情况变得更糟,因为它不会引发任何错误,但会默默地将空列表转换为 None。
我在发帖前弄明白了,但认为它对其他人仍然有用
简单的(对你们大多数人来说可能是显而易见的)解决方案是:
ArrayField(models.GenericIPAddressField(), default=list, blank=True, null=False)