2012-03-05 12 views
3

どのようにフィールドの依存関係を持つことができますか?Djangoモデル - フィールドの依存性

ケース1:ブールフィールドcall_meが設定されている場合、telephoneが、そうでなければ

ケース2空白にする必要があります設定する必要があります。多くの場合、多くの分野categoryに(値販売家賃付き)を持っています販売などの値の一つが、その後、price_saleは、そうでなければ

+2

あなたのモデルのレイアウトがひどく聞こえるようです。データベーススキーマを正規化してみてください。 – cha0site

+0

その部分は間違っているようですか? – RS7

答えて

4

は、ケース1の場合は、あなたがモデルのclean方法で簡単にそれを検証することができ、空白である必要があり、設定する必要があります。

ケース2の場合
from django.core.exceptions import ValidationError 

class MyModel(models.Model): 
    ... 
    def clean(self): 
     if self.call_me and not self.telephone.strip(): 
      raise ValidationError('Telephone is required') 

、M2Mの関係は、モデルが保存されているので、あなたのモデルにcleanを使用すると、このシナリオでは動作しません後までは追加されません。ただし、メソッド(ModelForm)から編集することができます。これは、管理者または自分のビューで行うことができます。

しかし、唯一の可能な値が「販売」および「賃貸料」である場合、categoryをM2Mとすると、設計が貧弱です。それでも "販売"と "家賃"は相互排他的なものなので、M2Mはとにかく不適切です(あなたのモデルは同時に "売却"と "賃貸料"の両方を経験しません)。

categoryCharFieldとし、choicesを「sale」と「rent」で構成することをお勧めします。このようにすれば、ケース1と同じ方法でモデルのcleanメソッドを使用することができます。

+0

あなたの返事をありがとう - ケース2の場合、 'categories'はセール、賃貸、休暇になりますので、私はジョインテーブルを持っている必要があります。 M2Mフィールドに少なくとも1行は必要ですか?ケース2への依存はどうですか? (私はかなりPython/Djangoの新機能です) – RS7

0

ケース1:

は、そのようにそれを行う電話番号の異なるテーブルを持っている人からForeignKeyをお持ちでない電話番号に(私はそれが人だと仮定しています)。一人につき複数の電話番号がある場合は、逆の方法で行います。それ以外の場合は、OneToOneの使用を検討してください。

明らかに、ForeignKeyはnull可能になります。そうすれば、電話番号を持つ唯一の方法は、その人が電話番号を提供するかどうかである。

ケース2:

私はここにあなたのデータベース設計を理解していないので、私は答えることができません。ここでManyToManyが必要な理由を詳細に説明する必要があります。

関連する問題