2011-12-24 7 views
2

models.py:上記で定義されたモデルと一対多の関係で新しいオブジェクトを作成するためのインラインフォームセット?

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

class ItemImage(models.Model): 
    image = models.ImageField(upload_to='item_pics') 
    item = models.ForeignKey(Item, related_name='images') 

ItemItemImageに1対多の関係を持っています。私はユーザーが新しいItemインスタンスを作成することを可能にするdjangoフォームと、最大2つのアップロードの選択肢(ItemImage)を作成しています。 Itemと関連するItemImageオブジェクトは、同じ段階で作成する必要があることに注意してください。

forms.py:二思想に

class ItemForm(ModelForm): 
    img_1 = fields.ImageField() 
    img_2 = fields.ImageField() 

    class Meta: 
     model = Item 
     fields = ('name', 'description', 'circles', 'location', 'rental_fee', 'rental_time_unit', 'deposit', 'rental_rules',) 

、代わりにItemFormに画像フィールドを追加するので、私はItemImageためModelFormを作成し、インラインを使用するより良い方法かもしれません推測していますフォームセット。私はインラインformsetを使用していないので、私の概念はまだ曖昧です。インラインformsetを使用するのが正しいシナリオかどうかを知りたい。

答えて

2

はい、これはModelFormSetを使用する非常に典型的な状況です。

img_1とimg_2がItemクラスの実際のフィールドであった場合、form.pyで使用される手法は適切ですが、関連するモデルのセットを扱う場合は、ModelFormSetを使用する方が適しています。

2つではなく3つの画像をユーザーに許可したい場合を考えてみましょう。 ModelFormSetを使用すると、の文字コードが変更されます。 ItemImageクラスに関する付帯情報を収集したい場合は、これも簡単な変更になります。

+0

私の推測を確認し、正しい経路を指摘してくれてありがとう。 – tamakisquare

+0

@tamakisquare昨日からこれについて私の頭を包み込むようにしてきました。上記の実例が役立つかもしれません!基本的に、私はモデルのフォームセット_alongを使用する方法を知りたいです。既にページ上で使用されているモデルフォームを使用しています。 – Anupam

+0

@Anupamここでお手伝いしたいと思いますが、Djangoをサーバーサイドレンダリングに使用してから数年が経ちました。すべての私のDjangoコードはAPI用です。 – tamakisquare

関連する問題