2015-11-21 74 views
0

考虑下面的代码:相关对象参考Django的

Models.py

class Advertisement(models.Model): 
    title = models.CharField(null=True, blank=True, max_length=30) 
    created_by = models.ForeignKey(User) 

class Gallery(models.Model): 
    advertisement = models.ForeignKey(Advertisement, related_name='images') 
    image = models.ImageField(upload_to=image_directory_path, help_text="Your ad image (Recommended size: 1024x768)") 
    creation_date = models.DateTimeField(editable=False, default=timezone.now) 

Views.py

def do_foo(request): 
    search_result = Advertisement.objects.all().order_by('-creation_date') 

    return render(request, 'content_search.html', 
        { 
         'search_result': search_result 
        }) 

page.html中

{% for ad in search_result %} 
    {% for ad_image in ad.gallery_set %} 
    <img src="{{ ad_image.image.url }}"> 
    {% endfor %} 
{% endfor %} 

如何访问广告和G之间的倒退关系防敏感?我尝试过ad.gallery_set和ad.images_set,但我无法获取图像。

我试图按照他们在这里说的Django Relation Objects Reference和这个topic

+1

您给后向引用指定了一个明确的名称,因此它会按照您指定的方式调用:'Advertisement.images'。 '_set'只在未指定显式'related_name'时添加。 – dhke

回答

3

您的编号有related_name="images"。所以ad.images是。

编辑:为正确切碎的笔记,你不能直接,如果你要循环使用它这一点,需要添加.all得到一个QuerySet对象:

{% for ad_image in ad.images.all %} 
    <img src="{{ ad_image.image.url }}"> 
{% endfor %} 

也许相关的名称"galleries"会更清楚一点。

+3

实际上它应该是'ad.images.all',因为图像是一个相关的管理器:'https:// docs.djangoproject.com/en/1.8/ref/models/relations /' – shredding

+0

它的工作原理。谢谢 :) –