将外键约束到模型的特定实例

时间:2014-03-28 08:55:10

标签: python sql django web

我有一个模型的两个实例'产品'。在管理员中,我上传了两张图片。当在各自的页面而不是两个页面上调用图像时,所有四个图像都被提供给每个页面。如何将图像限制在适当的产品中,而不会将图像溢出到错误的产品中?

我在models.py中有这种关系

class Product(models.Model):
    product_name = models.CharField(max_length=200) 
    def __unicode__(self):
        return self.product_name

class Image(models.Model):
    product_image = models.ForeignKey(Product)
    image = models.ImageField(upload_to='image')
    image_id = models.CharField(max_length=200)

views.py

def productpage(request, product_image_id):
    product_list = Product.objects.all()
    image_list = Image.objects.all()
    product = get_object_or_404(Product, pk=product_image_id)
    image = get_object_or_404(Image, pk=product_image_id)
    return render(request, 'polls/productpage.html', {
        'product': product, 'image': image, 
        'product_list' : product_list, 'image_list':image_list

TEMPLATE

     {% for image in image_list %}      
<div id ="{{ image.image_id }}"class="numbers"><img src="{{ image.image.url }}" alt="slide"></div>
     {% endfor %}
     }

我在两个产品页面上都会得到这个结果,当只有2个图像时,它会返回所有4个图像。

<div id ="one"class="numbers"><img src="/media/image/red1.jpg" alt="slide"></div>

<div id ="two"class="numbers"><img src="/media/image/red2.png" alt="slide"></div>

<div id ="one"class="numbers"><img src="/media/image/blue1.jpg" alt="slide"></div>

<div id ="two"class="numbers"><img src="/media/image/blue2.png" alt="slide"></div>

1 个答案:

答案 0 :(得分:2)

您可以使用image_list并仅为此获取图片,而不是获取所有图片的product。您可以使用product.image_set.all()作为

在模板中执行此操作
{% for image in product.image_set.all %}      
<div id ="{{ image.image_id }}"class="numbers"><img src="{{ image.image.url }}" alt="slide"></div>
{% endfor %}