【发布时间】:2016-03-16 00:19:16
【问题描述】:
我有以下型号:
class Deal(models.Model):
date = models.DateTimeField(auto_now_add=True)
retailer = models.ForeignKey(Retailer, related_name='deals')
description = models.CharField(max_length=255)
...etc
class CustomerProfile(models.Model):
saved_deals = models.ManyToManyField(Deal, related_name='saved_by_customers', null=True, blank=True)
dismissed_deals = models.ManyToManyField(Deal, related_name='dismissed_by_customers', null=True, blank=True)
我想做的是为客户检索交易,但我不想包含他们已取消的交易。
我无法理解多对多关系,并且无法弄清楚如何进行此查询。我假设我应该在 Deal.objects() 上使用排除,但我看到的所有排除示例都排除了一项,而不是多项。
当我天真地尝试时:
deals = Deal.objects.exclude(customer.saved_deals).all()
我收到错误:“'ManyRelatedManager' 对象不可迭代”
如果我说:
deals = Deal.objects.exclude(customer.saved_deals.all()).all()
我收到“太多值无法解包”(尽管我觉得我应该注意现在数据库中只有 5 个交易和 2 个客户)
我们(我们的客户)假设他/她将来会拥有成千上万的客户和数万笔交易,因此我希望尽我所能保持以绩效为导向。如果此设置不正确,我很想知道更好的方法。
另外,我正在运行 django 1.5,因为它部署在 App Engine 上(使用 CloudSQL)
我哪里错了?
【问题讨论】:
标签: django google-app-engine django-models