Создание настраиваемого поля: как смешать ImageField и ColorField? - PullRequest
0 голосов
/ 09 марта 2012

Мне нужно поле, в котором хранится информация об одном или следующих:

  • путь к изображению, если поле ссылается на изображение (например, models.ImageField)
  • строка, котораяпредставляет цвет ( в формате "rgb (245,30,46)" ), если поле относится к цвету.

Подробнее: Iнужно хранить информацию о фоне, который может быть изображением или цветом.

Должен ли я сделать наследование от models.ImageField или от models.CharField?Если первое, то как я могу предоставить правильные тесты для хранения информации в базе данных и извлечения информации из базы данных?

Если у вас есть такой пример, пожалуйста, дайте мне ссылку.

1 Ответ

4 голосов
/ 09 марта 2012

Эти типы данных (хотя технически обе строки) слишком различны, чтобы разумно хранить их в одном столбце.Вы должны просто использовать два поля, одно для изображения, другое для цвета и сделать оба поля необязательными (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')
...