我需要在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 返回对象,包含符合条件的连接,排除不符合该条件的连接。
有什么办法吗?
答案 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)
它不漂亮,但它会实现你想要的:) 对于所有的编辑都很抱歉,这个编辑有点令人费解。