2012-03-09 62 views
0

我需要存儲關於一個或信息的一個以下字段:創建自定義字段:如何混合ImageField和ColorField?

  • 如果該字段指的是圖像(像models.ImageField)
  • 表示在格式的顏色(的字符串的圖像路徑「rgb(245,30,46)」)如果該字段涉及顏色。

有關詳細信息:我需要存儲有關背景的信息,可以是圖片或顏色。

我應該從models.ImageField繼承還是從models.CharField繼承?如果前者那麼我該如何提供正確的存儲信息到數據庫的測試並從數據庫中檢索信息呢?

如果你有這樣的例子,請給我一個鏈接。

+0

你真的需要存儲在一個模型領域的路徑和顏色? – San4ez 2012-03-09 16:13:06

+0

我認爲這很有吸引力。 – sergzach 2012-03-09 16:16:01

回答

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') 
+0

謝謝你,克里斯,一個非常好的主意!但是,兩者都是基於字符串的,因此,可能我可以創建一個從models.CharField繼承的字段?無論如何謝謝你的建議。 – sergzach 2012-03-09 16:21:49

+0

是的,它們都是基於字符串的,但是'FileField's有很多基礎設施給他們,即使不是不可能,也很難將這個值看作是一種顏色。你*可以*簡單地使用'CharField',但是你會丟失'FileField'中的所有基礎設施,並且不得不重新創建它(並且考慮將來更新Django中的文件管理)。代碼將是一團糟。這只是一個糟糕的主意。 – 2012-03-09 16:52:17

+0

謝謝!依靠你的經驗。 – sergzach 2012-03-09 17:04:34

相關問題