返回过滤的对象(列表或查询集)

时间:2017-03-15 08:28:38

标签: django filtering django-queryset django-rest-framework

我需要在django rest框架过滤器中过滤一些数据。我有模特:

class A(models.Model):
    ...
    connections = models.ManyToManyField(classB)
    ....


class B(models.Model):
   ...
   date_added=models.DateTimeField()
   ....

我需要返回带有过滤连接的classA对象。

例如, classA 对象与不同的date_added字段有许多连接。我需要返回带有连接的 classA 对象,但连接应仅来自指定日期。

classA 对象可以包含不同的连接,但如果它与指定日期有连接,我需要从 classA 返回对象,包含符合条件的连接,排除不符合该条件的连接。

有什么办法吗?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

A.objects.filter(connections__date_added=your_datetime)

答案 1 :(得分:0)

首先获取给定日期的所有B类对象的查询集。 然后对与该日期相关的所有连接执行反向查找。然后检查manytomany set是否有任何其他连接!=到原始给定日期,如果没有,则将A类对象添加到列表中:

# queryset of all B objects for a specific date
b_queryset = B.objects.filter(date_added__date=my_datetime_date)

# Empty list to place all related A objects
a_list_initial = []

for x in b_queryset:
    # Add all related class A objects to a list
    [a_list_initial.append(y) for y in x.connections_set.all()]

# Empty list to finally place only desired A objects
desired_a_objects = []    
for z in a_list_initial:
    checker = all(item.date_added__date == my_datetime_date for item in z.connections.all())
    if checker == True:
        desired_a_objects.append(z)

它不漂亮,但它会实现你想要的:) 对于所有的编辑都很抱歉,这个编辑有点令人费解。