Django + MySQL:存储多个外键的性能
Django + MySQL: performance on storing multiple foreign key
我有两个模型 Post
和 Item
希望有它们的 images
字段,它引用模型 Image
:
的实例
class Image(models.Model):
image = models.ImageField(upload_to='images')
我能想到的第一个办法是Post
和Item
都加一个TextField
,然后把Image
的image_instance.image.url
存起来实例,所以每次我想显示 item
或 post
的所有图像时,我获取 item.images
并将字符串拆分为一个数组,所有 url 都在那里。
第二种方法是将 post
和 item
字段添加到 Image
模型作为可为空的外键字段。所以每次我想显示 post
或 item
的所有图像时,我都会做类似 Image.objects.filter(item=some_item_instance)
的操作,然后提取 .image.url
.
我想知道哪种方法在实践中更好,或者还有其他更好的方法?
只需使用 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)
在其他地方,从 Post
实例中提取 images
的集合并遍历它:
my_post = Post.objects.first()
for image in my_post.images:
print image.url
我有两个模型 Post
和 Item
希望有它们的 images
字段,它引用模型 Image
:
class Image(models.Model):
image = models.ImageField(upload_to='images')
我能想到的第一个办法是Post
和Item
都加一个TextField
,然后把Image
的image_instance.image.url
存起来实例,所以每次我想显示 item
或 post
的所有图像时,我获取 item.images
并将字符串拆分为一个数组,所有 url 都在那里。
第二种方法是将 post
和 item
字段添加到 Image
模型作为可为空的外键字段。所以每次我想显示 post
或 item
的所有图像时,我都会做类似 Image.objects.filter(item=some_item_instance)
的操作,然后提取 .image.url
.
我想知道哪种方法在实践中更好,或者还有其他更好的方法?
只需使用 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)
在其他地方,从 Post
实例中提取 images
的集合并遍历它:
my_post = Post.objects.first()
for image in my_post.images:
print image.url