2014-03-28 4 views
0

두 개의 모델 '제품'인스턴스가 있습니다. 관리자는 각 이미지에 두 개의 이미지를 업로드합니다. 이미지가 둘 대신에 각각의 페이지에서 호출되면 네 개의 이미지가 모두 각 페이지에 제공됩니다. 이미지를 잘못된 제품에 쏟지 않고 적절한 제품으로 제한하려면 어떻게합니까?모델의 특정 인스턴스에 대한 외래 키 제한

내 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> 

답변

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

신속하고 유용한 답변을 제공해 주셔서 감사합니다. – AllTheTime

+1

추가 팁 : 외부 키 필드에'related_name'을 추가하면 Django가 생성하는 기본 역방향 관계 이름 (이 경우 "image_set")을 변경할 수 있습니다. 그래서'product_image = models.ForeignKey (Product, related_name = 'images')'는'product.image_set.all()'대신'product.images.all()'을 사용할 수 있음을 의미합니다. 당신은 종종 이런 식으로 더 좋게 보일 수 있습니다. –