2011-10-20 20 views
0

ツアーと代理店という2つのモデルがあります。 ツアーと各代理店にはn個の画像があります これはどのように実装できますか? は、私はこのようなモデルを定義する必要があります各アイテムにn個の画像を持つ方法

class Gallery(models.Model): 
    Image=models.ImageField(upload_to="gallery") 

と、このようなモデルを見学し、庁には、このフィールドを追加します?

Gallery=models.ForeignKey(Gallery) 

私はこれを行う場合は、各ツアーや機関を追加するとき、私たちは持っていますギャラリー内のすべての画像のリスト 各アイテムにn枚の画像を追加したいだけです どうすればいいですか?

答えて

3

ツアーとAgenciesの間でイメージを再利用するかどうか、1つまたは2つのImageクラスを持つことが理にかなっているかどうかによって、これを行う方法はいくつかあります。

class Gallery(models.Model): 
    "Represents a set of images." 
    # maybe a title or other fields? 

class Image(models.Model): 
    "Represents one image." 
    # field names are usually lowercase, for clarity 
    image = models.ImageField(upload_to="gallery") 
    gallery = models.ForeignKey(Gallery, related_name='images') 
    # you might want more fields here, e.g. title, alt_text, etc 

class Tour(models.Model): 
    gallery = models.OneToOneField(Gallery) 

class Agency(models.Model): 
    gallery = models.OneToOneField(Gallery) 

これはTourAgencyの両方を参照することができGalleryと呼ばれる仲介モデルを設定します:あなたのユースケースについての詳細を知らなくても、私はこのようにそれを行う可能性があります。 TourまたはAgencyに複数のGalleryを許可する場合や、異なるオブジェクト間でギャラリーを再利用する場合は、OneToOneFieldの代わりにForeignKeyを使用できます。ギャラリー間で画像を共有する場合は、ImageクラスのForeignKeyの代わりにManyToManyFieldを使用できます。

+0

OneToOneFieldは各アイテムの画像を生成しますが、各アイテムにはn個の画像が必要です。外字を使用すると、各アイテムにn個の画像を持つことができますが、アイテムを追加すると、他の画像を見ることなく各項目にn枚の画像を追加したい。 –

+0

この場合、OneToOneFieldは、ツアーとギャラリー(n個のイメージのセット)の間にあります。各ギャラリーには、システム内のすべての画像ではなく、特定のツアーまたは代理店に関連する画像があります。 – nrabinowitz

+0

Uはなぜギャラリーモデルを使用しましたか?私はイメージモデルが十分だったと思う。 Uマインドはもっと記述するだろうか? –

関連する問題