2013-11-01 39 views
0

你好我是Django的新手,也是編程。有人能解釋我如何比較由同一模型創建的對象嗎?如何比較Django中的對象?

  • 產品1
  • shop1
  • 產品1
  • SHOP2
  • 產品1
  • shop3

我想我的應用程序做一些事情,如果它發現多個對象具有相同的參數 - 「產品1」和理想會作出這樣的對象:

  • 產品1
  • shop1
  • SHOP2
  • shop3

型號:

class ProductInShop (models.Model): 
    product = models.ForeignKey(Product) 
    shop = models.ForeignKey(Shop) 

查看:

def products(request): 
    all_products = ProductInShop.objects.all 
    return render_to_response('polls/products.html', { 
     'all_products': all_products, 
     }) 

模板:

{% for asd in all_products %} 
    <li>{{ asd.product.name }}</li> 
    <li>{{ asd.shop.name }}</li> 
    </br> 
{% endfor %} 

回答

0

我認爲,你可以改變你的結構是這樣的:

型號:

class Product(models.Model): 
    ... all other fields 
    shops = models.ManyToManyField(Shop) 

查看:

def products(request): 
    all_products = Product.objects.all() 
    return render_to_response('polls/products.html', { 
     'all_products': all_products, 
    }) 

模板:

{% for product in all_products %} 
    <li>{{ product.name }}</li> 
    {% for shop in product.shops.all() %} 
     <li>{{ shop.name }}</li> 
    {% endfor %} 
    </br> 
{% endfor %} 

更新:

有了您的結構,你可以如下寫:

查看:

def products(request): 
    all_products = Product.objects.all() 
    return render_to_response('polls/products.html', { 
     'all_products': all_products, 
    }) 

模板:

{% for product in all_products %} 
    <li>{{ product.name }}</li> 
    {% for productinshop in product.productinshop_set.all %} 
     <li>{{ productinshop.shop.name }}</li> 
    {% endfor %} 
    </br> 
{% endfor %} 

但是這將產生許多查詢數據庫。也許會更好,如果你在產品模型建立方法:

def get_shops(self): 
    return Shop.objects.filter(productinshop__product_id=self.pk) 

然後在模板:

{% for product in all_products %} 
    <li>{{ product.name }}</li> 
    {% for shop in product.get_shops %} 
     <li>{{ shop.name }}</li> 
    {% endfor %} 
    </br> 
{% endfor %} 
+0

在ProductInShop中不僅僅是2個字段。我不能改變結構。 – user2943438

+0

我已經更新了我的答案,因此您可以按原樣保留架構。 –

+0

非常感謝。我會更仔細地閱讀Django文檔。 – user2943438