如何比较Django中的对象?

2024-06-17 11:17:08 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我是在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 %}

Tags: 对象djangoname产品models编程liall
2条回答

您可以比较对象的md5

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

我想,你可以这样改变你的结构:

型号:

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

相关问题 更多 >