创建自定义字段:如何混合ImageField和ColorField?

时间:2012-03-09 16:03:56

标签: python django django-models

我需要一个存储有关一个或多个信息的字段:

  • 如果字段引用图片(如models.ImageField)
  • ,则为图像路径
  • 如果字段指的是颜色,则表示颜色的字符串(格式为 “rgb(245,30,46)”)。

详细信息:我需要存储有关背景的信息,可以是图片或颜色。

我应该从models.ImageField还是从models.CharField继承?如果是前者那么我该如何提供将信息存储到数据库并从数据库中检索信息的正确测试?

如果你有这样的例子,请给我一个链接。

1 个答案:

答案 0 :(得分:4)

这些数据类型(虽然在技术上是两个字符串)太不同,不能合理地存储在同一列中。您应该只使用两个字段,一个用于图像,另一个用于颜色,并且两者都是可选的(blank=True)。

然后,您可以覆盖模型的clean方法以强制其中一个存在:

class MyModel(models.Model):
    ...
    def clean(self):
        if not self.image and not self.color.strip():
            raise ValidationError('You must specify either an image or color')