0

你好,我是 Django 和编程的新手。有人可以解释一下如何比较由同一模型创建的对象吗?

  • 产品1
  • 店铺1
  • 产品1
  • 店铺2
  • 产品1
  • 店铺3

如果我的应用程序找到多个具有相同参数的对象 - “product1”,我希望我的应用程序执行某些操作,并且理想情况下将创建一个像这样的对象:

  • 产品1
  • 店铺1
  • 店铺2
  • 店铺3

模型:

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 %}
4

2 回答 2

0

您可以比较md5对象:

http://docs.python.org/2/library/hashlib.html

于 2013-11-01T00:51:06.893 回答
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 %}

但这会对数据库产生许多查询。如果您在 Product 模型中创建方法可能会更好:

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 %}
于 2013-11-01T00:58:20.017 回答