2

私のプライマリ クラス モデル Deals には、description、price、date_created などの特定のフィールドがあります。サブフィールドを持ついくつかのフィールドを追加する必要があります。たとえば、取引に年齢フィールドを追加しようとしています。この年齢フィールドにはさらにサブフィールド (score_for_kid、score_for_baby、score_for_old など) があり、管理者からこれらのスコアを編集したいと考えています。

ここに私のmodels.pyがあります:

class Deals(models.Model):
    description = models.TextField()
    price = models.DecimalField(max_digits=7, decimal_places=2)
    url = models.URLField(verify_exists=False)
    currency = models.CharField(max_length=3)
    created_date = models.DateField(auto_now_add=True)

    kid_score = models.IntegerField(max_length=2,default=0)
    teenager_score = models.IntegerField(max_length=2,default=0)
    youth_score = models.IntegerField(max_length=2,default=0)
    old_score = models.IntegerField(max_length=2,default=0)

これらすべてのサブフィールド (4 つの異なるフィールドで約 20 ~ 25) をモデルに保存するのではなく、これらのサブフィールドに接続された年齢フィールドを保存したくありません。ManyToManyField はこれで機能しますか?

基本的な要件は、ユーザーがブラウザーでサブフィールド (たとえば子供) を選択すると、子供のスコアが高いすべてのオブジェクトが表示されることです。

私は Django に非常に慣れていないので、これに関するヘルプは素晴らしいでしょう。ありがとう。

4

1 に答える 1

0

あなたの質問を正しく理解できたら、ForeignKey フィールドを使用する必要があります。

class Deals(models.Model):
    description = models.TextField()
    price = models.DecimalField(max_digits=7, decimal_places=2)
    #...
    age = models.ForeignKey(Age)

class Age(models.Model):
    kid_score = models.IntegerField(max_length=2,default=0)
    teenager_score = models.IntegerField(max_length=2,default=0)
    #...

Modelsのドキュメントをよく読んでください。また、リレーショナル データベースや基本的な sql について読んでみると役に立つかもしれません。

django admin でオブジェクトを編集するときは、おそらくInlineModelAdminクラスを使用したいと思うでしょう。

アップデート

あなたの質問を読み直すと、メインの取引モデルでこれらの追加フィールドを表示/非表示にしたいだけのように思えます。このような場合は、admin で「collapse」クラスを使用してフィールドセットを使用する必要があります。docsに例があります。

Dealレコードに複数kid_scoreの を関連付けたい場合は、外部キーが必要です。それぞれDealが 1 つしか持つことができない場合は、(およびその他の) フィールドをメイン モデルkid_scoreに保持する必要がありますkid_score(これが混乱する場合は、SQL / リレーショナル データベースを読んでください)。

于 2013-02-19T09:12:24.990 に答える