私は、いくつかの標準フィールドといくつかのカスタムフィールドユーザーが後で定義するフォームを含むプロジェクトに取り組んでいます。標準フォームは、models.pyのモデルで定義されています。例えば:
class Order(models.model):
number = models.TextField()
date = models.DateField()
次に、このモデルを使用して、情報を入力する方法を作成するための単純なモデルフォームを作成します。これはかなり標準的なDjangoです。
トリッキーなことは、私のユーザーがフォームに任意のフィールドを追加できるようにしたいと思っていることです。彼らは、管理インターフェースを使用して、基本的にフォームを変更し、実行時にフォームに値を追加できるようにしたいと考えています。
そのため、「追跡番号」などの新しいテキストフィールドが必要になる場合があります。秘訣は、たまにしか必要とせず、データベース全体を再構築せずに動的に追加できるようにしたいということです。
次のように、カスタムフィールドを表す非常に単純なモデルを作成できます。
class CustomField(models.Model):
type = models.CharField(choices=FIELD_TYPES)
required = models.BooleanField()
次に、OrderクラスのModelFormを取得し、それを拡張してこれらのカスタムフィールドを追加できると思います。私が確信していないのは、カスタムフィールドの値を注文にリンクする方法です。
私はこれがすべて奇妙に聞こえるかもしれないことを知っていますが、実際にはそれは理にかなっています。各ユーザーはフォームに対するニーズがわずかに異なり、それを微調整したいと考えています。特定のフィールドを持つようにモデルをハードコーディングする必要がある場合は、ユーザーごとにフォークを用意する必要があります。それは単にスケーリングしません。代わりに、管理インターフェースを介してフィールドを追加するだけでよい場合は、はるかに簡単です。
これはおそらくすでに誰かによって解決されているようなものだと思います。私は単に解決策を見つけることができません。このようなリクエストを受け取ったのは私だけではありませんか?