2015-02-04 3 views
0

У меня есть две модели Post и Item, которые надеются иметь свое images поле, которое ссылаются на экземпляры модели Image:Django + MySQL: производительность на хранение несколько внешних ключей

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

Первый подход, который я могу думать от того, является добавление TextField как к Post и Item и хранить image_instance.image.url х Image экземпляров, поэтому каждый раз, когда я хочу, чтобы отобразить все изображения с item или post, я получить item.images и разбить строку в массив, и все там есть URL-адреса.

Второй подход заключается в том, чтобы добавить post и item в поле Image как поле с переменным нулевым внешним ключом. Поэтому каждый раз, когда я хочу отображать все изображения post или item, я делаю что-то вроде Image.objects.filter(item=some_item_instance) и извлекаю .image.url.

Интересно, какой подход лучше на практике, или есть другие более эффективные подходы?

ответ

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 
+0

Спасибо. Я возьму ваше решение. Я использовал «ManyToManyField» для нескольких фактических отношений «многие ко многим», но не был уверен, что он также рекомендуется для «один ко многим» (над «ForeignKey' +' related_name'). – Lelouch

Смежные вопросы