オブジェクトの状態に基づいてフォーム フィールドの必須属性を変更することは可能ですか (可能な場合はモデルフォームと管理者で)?
例:私のDBモデルにはstatus
フィールドが含まれており、現在のオブジェクトのステータスに応じて、特定のステータス値では他のフィールドが必要であり、他のフィールドではオプションである必要があります。
オブジェクトの状態に基づいてフォーム フィールドの必須属性を変更することは可能ですか (可能な場合はモデルフォームと管理者で)?
例:私のDBモデルにはstatus
フィールドが含まれており、現在のオブジェクトのステータスに応じて、特定のステータス値では他のフィールドが必要であり、他のフィールドではオプションである必要があります。
さらに良いことに、Model
レベルでそれを行うことができます。
class MyModel(models.Model):
.... some fields here...
def clean(self):
from django.core.exceptions import ValidationError
# Don't allow draft entries to have a pub_date.
if self.status == 'draft' and self.pub_date is not None:
raise ValidationError('Draft entries may not have a publication date.')
# Set the pub_date for published items if it hasn't been set already.
if self.status == 'published' and self.pub_date is None:
self.pub_date = datetime.date.today()
それ以外の場合、これが特に db モデルに関連付けられていない場合はclean
、モデル フォームのメソッドを同様に定義できます。
こちらをご覧ください
更新:required
あなたが言及した属性を取得しました。
required 属性を動的に変更する必要はありません。まず第一に、RDBMS はそれをサポートしていません。制約があるか、ないかのどちらかです。したがって、これはビジネス ロジックであり、DB ロジックではないためnull=True
、これらのフィールド (required=False、フォーム フィールド) を配置し、上記で示したように処理する必要があります。