我正在使用Django进行查询,我有我的模型:
class Recommender(models.Model):
customer = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="recoCustomer")
brand = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="recoBrand")
recommender = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="recommender")
authorized = models.ForeignKey(State, default=5,
help_text=_('Recommend state (5-pending, 6-approved, 2-canceled).'),
)
dateTime = models.DateTimeField(auto_now=True)
第一个要求是:
我需要所有记录,其中客户等于用户中的loggued且authorized
等于5
。我的第一个问题是:
Recommender.objects.all().filter(
customer=request.user, authorized=State.objects.get(pk=5)
)
但是,现在我需要所有记录,其中客户等于用户的loggued, 授权 等于5,但如果存在一对( brand_id , customer_id ) 授权 等于6,查询必须使用 忽略这对夫妇的其他记录( brand_id , customer_id )授权 等于5。
------------------------------------------------------------------
Records on table Recommenders
------------------------------------------------------------------
| authorized | brand_id | customer_id | recommender_id | dateTime |
|------------|----------|-------------|----------------|----------|
| 5 | 1 |32 |31 | ... |
| 5 | 1 |32 |19 | ... |
| 5 | 9 |32 |8 | ... |
| 5 | 28 |32 |8 | ... |
| 6 | 1 |32 |8 | ... |
在上一个表中,查询不应返回带有几个的记录( brand_id , customer_id )=( 1 , 32 ),因为这对夫妇与 授权存在一条记录等于6
。
如何使用Django ORM进行此查询?
答案 0 :(得分:0)
以下是Q()
的示例 if query:
queryset_find = queryset_list.filter(
Q(FP_Item__contains=query))
context = {'object_list': queryset_find}
return render(request, 'index.html', context)
如果你需要多个查询,这里是参考,搜索"多个" https://docs.djangoproject.com/en/2.0/topics/db/queries/