我有两个模型Post
和Item
希望拥有images
字段,这些字段引用模型Image
的实例:
class Image(models.Model):
image = models.ImageField(upload_to='images')
我能想到的第一种方法是向TextField
和Post
添加Item
,并存储image_instance.image.url
个Image
个实例,所以每当我想要显示item
或post
的所有图像时,我都会获得item.images
并将字符串拆分成一个数组,并且所有网址都在那里。
第二种方法是将post
和item
字段添加到Image
模型中,作为可以为空的外键字段。因此,每当我想要显示post
或item
的所有图片时,我都会执行Image.objects.filter(item=some_item_instance)
之类的操作,并提取.image.url
。
我想知道哪种方法在实践中更好,或者还有其他更好的方法?
答案 0 :(得分:1)
只需使用ManyToManyField
来存储Post
(或Item
)与Image
之间的关系,然后对其进行迭代。像models.py那样:
class Image(models.Model):
image = models.ImageField(upload_to='images')
class Post(models.Model):
body = models.TextField()
images = models.ManyToManyField(Image)
在其他地方,从images
实例中提取Post
的集合,然后迭代:
my_post = Post.objects.first()
for image in my_post.images:
print image.url