2012-03-09 3 views
0

は、私は1つについての情報又は以下を格納するフィールドが必要:カスタムフィールドの作成:ImageFieldとColorFieldの混合方法

  • フィールドは
  • 形式で色(を表す文字列(models.ImageField等)のピクチャを参照する場合の画像パス"rgb(245,30,46)")フィールドが色を参照する場合。

詳細:写真や色の背景に関する情報を保存する必要があります。

models.ImageFieldまたはmodels.CharFieldから継承を行う必要がありますか?前者の場合、情報をデータベースに格納し、データベースから情報を取得する正しいテストをどのように提供できますか?

このような例がある場合は、私にリンクを教えてください。

+0

あなたは本当に1つのモデルフィールドにパスと色を保存する必要がありますか? – San4ez

+0

私はそれが魅力的だと思います。 – sergzach

答えて

4

これらのデータ型(技術的には両方の文字列)は、同じ列に賢明に格納するにはあまりにも異なっています。イメージ用とカラー用の2つのフィールドを使用するだけで、両方のフィールドをオプション(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

+0

はい、どちらも文字列ベースですが、 'FileField'には値が単なる色であるかどうかを判断することは不可能ではないにしても、難しいでしょう。あなたは単に 'CharField'を使うことができますが、' FileField'のすべてのインフラストラクチャを失い、それをすべて再作成しなければなりません(Djangoのファイル管理への今後の更新を考慮する必要があります)。コードは混乱するでしょう。それはまったく悪い考えです。 –

+0

ありがとう!あなたの経験に頼ってください。 – sergzach

関連する問題