当我在Django模型上应用.filter()时,我就遇到了这个问题,它返回了我不想要的所有销售数据,我试图根据日期过滤数据,只想要输入日期的数据
销售模式:
class Sales(models.Model):
Amount = models.FloatField(blank=True, null=True)
Date = models.DateField()
updated_at = models.DateTimeField(auto_now=True)
VAT = models.BooleanField(default=True)
字符串
机器型号:
class Machine(models.Model):
name = models.CharField(max_length=50)
Sales = models.ManyToManyField(Sales, blank=True)
......
型
API:
class MachineDateData(APIView):
def post(self, request):
target_date = date(2023, 5, 1)
data = Machine.objects.filter(id=524).filter(Sales__Date=target_date)
serializer = MachineReadOnlySerializer(data, many=True)
return Response(serializer.data)
型
串行化器:
class MachineReadOnlySerializer(serializers.ModelSerializer):
class Meta:
model = Machine
depth = 1
fields = ('id','name', 'Sales')
型
测试结果:
[
{
"id": 524,
"name": "Résidhome Marseille Saint Charles ",
"Sales": [
{
"id": 67274,
"Amount": 45.12327285161129,
"Date": "2023-05-01",
"updated_at": "2023-07-29T19:08:07.702463Z",
"VAT": false
},
{
"id": 67275,
"Amount": 43.24381640146215,
"Date": "2023-05-02",
"updated_at": "2023-07-29T19:08:07.725326Z",
"VAT": false
},
{
"id": 67276,
"Amount": 85.53046658140136,
"Date": "2023-05-03",
"updated_at": "2023-07-29T19:08:07.747431Z",
"VAT": false
},
...more results here
}
]
型
我正在寻找这样的结果,两个表的内部连接,我尝试在SQL上运行,在SQL上运行良好并显示结果,但在Django ORM中它确实显示了所有数据
[
{
"id": 524,
"name": "Résidhome Marseille Saint Charles ",
"Sales": [
{
"id": 67274,
"Amount": 45.12327285161129,
"Date": "2023-05-01",
"updated_at": "2023-07-29T19:08:07.702463Z",
"VAT": false
}
]
}
]
型
SQL查询
select * from Machine_machine mm INNER JOIN Machine_machine_Sales as mms on mm.id = mms.machine_id INNER JOIN Machine_sales Ms on mms.sales_id = Ms.id where Date ='2023-05-01';
型
SQL查询(数据。查询)
SELECT "Machine_machine"."id", "Machine_machine"."name", "Machine_machine"."Modem", "Machine_machine"."Picture", "Machine_machine"."IMEI", "Machine_machine"."Telemetry_Unit_Firmware", "Machine_machine"."Manufacturer_Model", "Machine_machine"."Serial_No", "Machine_machine"."Machine_type_id", "Machine_machine"."FW", "Machine_machine"."Protocol", "Machine_machine"."Connection_Method", "Machine_machine"."Data_usage_last_month", "Machine_machine"."Data_overspend_last_month", "Machine_machine"."Power", "Machine_machine"."Network", "Machine_machine"."Sim_Status", "Machine_machine"."Communication", "Machine_machine"."Signal", "Machine_machine"."Active", "Machine_machine"."Location_id" FROM "Machine_machine" INNER JOIN "Machine_machine_Sales" ON ("Machine_machine"."id" = "Machine_machine_Sales"."machine_id") INNER JOIN "Machine_sales" ON ("Machine_machine_Sales"."sales_id" = "Machine_sales"."id") WHERE ("Machine_machine"."id" = 524 AND "Machine_sales"."Date" = 2023-05-01) ORDER BY "Machine_machine"."id" ASC
型
2条答案
按热度按时间hfsqlsce1#
首先检查对象数据。我认为对象具有多个销售值关系。
字符串
如果存在,则删除不需要的数据,只保留所需的数据。
afdcj2ne2#
4天后,我终于想出了解决这个问题的更好方法!
字符串
可以基于用于数据过滤值来改变过滤器中的值
现在的数据集:
型