我正在尝试将多个模型(在此示例中为CoolModel和OtherModel)链接到Gallery Model ...而后者将具有多个Images。所以CoolModel可以有多个图片,而OtherModel可以有多个图片...都存储在同一个(图像)表中。
我认为这是应该如何布局的,但我不清楚我将如何操纵(创建/删除)CoolModel和OtherModel的实例。有人可以提供示例代码来创建CoolModel并为其分配几个图片吗?
class Gallery(models.Model):
# not sure how to link this to Image...or if it even has to be?
class Image(models.Model):
gallery = models.ForeignKey(Gallery)
image = models.ImageField(upload_to='media')
class CoolModel(models.Model):
name = models.CharField(max_length=128)
images = models.ForeignKey(Gallery)
class OtherModel(models.Model):
name = models.CharField(max_length=128)
images = models.ForeignKey(Gallery)
答案 0 :(得分:0)
在我看来,你需要看看ManyToMany的关系。我的一些图片最终会出现在重复的画廊中。此时,如果您有外键关系,则图像将只能属于一个特定的图库。这可能是您想要的,但图像有时可分为几类。我认为你会想要一个很多人到你的画廊,所以你可以有画廊入口"体育,明星"都可以适用于勒布朗詹姆斯酷图像......
答案 1 :(得分:0)
我并不完全明白你想要实现的目标,但它听起来类似于播放列表,或者像this example from the Django docs一样,通过中间人与ManyToMany关系相似。这是一个基于对你正在寻找什么样的关系的总体黑暗猜测的例子(因为我不知道CoolModel'应该做什么或者为...:
class CoolModel(models.Model):
name = models.CharField(max_length=128)
other attributes
class Gallery(models.Model):
coolmodel = models.ManyToMany(CoolModel, through='Image')
class Image(models.Model):
image = models.ImageField(upload_to='media')
gallery = models.ForeignKey(Gallery)
coolmodel = models.ForeignKey(CoolModel)
中介的关键是利用through
参数,文档中有一些关于如何使用这些关系插入对象的好例子(从文档中复制):
>>> ringo = Person.objects.create(name="Ringo Starr")
>>> paul = Person.objects.create(name="Paul McCartney")
>>> beatles = Group.objects.create(name="The Beatles")
>>> m1 = Membership(person=ringo, group=beatles,
... date_joined=date(1962, 8, 16),
... invite_reason="Needed a new drummer.")
>>> m1.save()
>>> beatles.members.all()
[<Person: Ringo Starr>]
>>> ringo.group_set.all()
[<Group: The Beatles>]
>>> m2 = Membership.objects.create(person=paul, group=beatles,
... date_joined=date(1960, 8, 1),
... invite_reason="Wanted to form a band.")
>>> beatles.members.all()
[<Person: Ringo Starr>, <Person: Paul McCartney>]