使用Django 2.0查询复杂

时间:2018-04-05 16:28:28

标签: django django-models

我正在使用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进行此查询?

1 个答案:

答案 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/