Django + MySQL:存储多个外键的性能

时间:2015-02-04 23:07:25

标签: django performance

我有两个模型PostItem希望拥有images字段,这些字段引用模型Image的实例:

class Image(models.Model):
    image = models.ImageField(upload_to='images')

我能想到的第一种方法是向TextFieldPost添加Item,并存储image_instance.image.urlImage个实例,所以每当我想要显示itempost的所有图像时,我都会获得item.images并将字符串拆分成一个数组,并且所有网址都在那里。

第二种方法是将postitem字段添加到Image模型中,作为可以为空的外键字段。因此,每当我想要显示postitem的所有图片时,我都会执行Image.objects.filter(item=some_item_instance)之类的操作,并提取.image.url

我想知道哪种方法在实践中更好,或者还有其他更好的方法?

1 个答案:

答案 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