1

私は自分のモデルに次のコードを持っています

MY_CATEGORIES = (
('A', 'meal'),
('B', 'personal'),
)

######### and the model
class Job(models.Model):
    category= models.CharField(max_length=1,choices=MY_CATEGORIES,default='A')

選択肢のリストを拡張可能にしたいと考えています。つまり、ユーザーが希望する選択肢が存在しない場合は、新しい選択肢を書くことができ、将来的には選択肢として利用できるようになります。

4

1 に答える 1

1

モデルを追加してCategory、初期値mealを設定し、フィクスチャpersonalを介して設定できます。ユーザーが存在しないカテゴリに入ると、新しいオブジェクトが作成されます。

編集

Job基本的にCategory、 1 つでJobはなく 2 つのモデルを作成ForeignKeyCategoryます。

class Category(models.Model):
    name = models.CharField(max_length=50)

class Job(models.Model):
    category= models.ForeignKey(Category)

自分でテーブルを作成する必要はありません。次の実行時に syncdb が処理します。

次に、フィクスチャを作成し、fixturesアプリのディレクトリに配置します。これにより、次の 2 つのエントリが常に存在することが保証されます。

[
    {
        "model": "myapp.category",
        "pk": 1,
        "fields": {
            "name": "meal"
        }
    },
    {
        "model": "myapp.category",
        "pk": 2,
        "fields": {
            "name": "personal"
        }
    }
]

これらのエントリは、作成時にカテゴリ モデルの管理者から入力することもできます。次に、dumpdata を使用してデータをダンプできるので、手動で記述する必要はありません。

もちろん、新しいカテゴリ インスタンスを作成するためのビュー/フォーム ロジックを記述する必要があります。フォームはモデルModelForm用のほぼ標準的なものである必要がJobあり、さらに新しいカテゴリを入力するための追加フィールドが機能するはずです。したがって、考えなければならない唯一のことは、新しいエントリを作成することの検証です。ModelChoiceFielda のデフォルトではすべてのエントリが含まれるため、フォームは自動的に新しいエントリを取得します。

于 2013-02-10T20:40:13.803 に答える