django - 如何在 django REST 中通过相关表的外键过滤模型对象
问题描述
我想为一家餐厅制作一个 API,我models.py
是这样的:
class Table(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30, null=False, blank=False)
is_free = models.BooleanField(default=True)
def __str__(self):
return '%s %s %s' % (self.id, self.name, self.is_free)
class Order(models.Model):
order_id = models.AutoField(primary_key=True)
table_id = models.ForeignKey(Table, on_delete=models.CASCADE)
total_price = models.IntegerField()
factor_id = models.IntegerField()
def __str__(self):
return '%s %s %s' % (self.order_id, self.table_id.id, self.total_price)
class OrderDetail(models.Model):
order_detail_id = models.IntegerField(primary_key=True)
order_id = models.ForeignKey(Order, on_delete=models.CASCADE)
food_id = models.ForeignKey(Food, on_delete=models.CASCADE)
amount = models.IntegerField()
price = models.IntegerField()
def __str__(self):
return '%s %s %s' % (self.order_detail_id, self.order_id, self.food_id.name)
当创建一个带有表的订单时,应该添加一些 OrderDetails。
我想过滤所有针对特定表和最新订单的 OrderDetail 对象(我的意思是所有现在处于活动状态的 OrderDetail 对象)。带有过滤器的客户端请求 URL 包含table_id
和不包含order_id
. 如何按拥有它的表过滤 OrderDetail 对象?
每个表一次只能有一个订单,当一个订单使用特定的表创建时,
is_free
将设置为 False。所以table_id
Order 类的字段应该models.ForeignKey
不是models.OneToOneField
,我想是的!:) 如果有错请告诉我。
提前致谢。
解决方案
尝试这个,
order_detail_queryset = OrderDetail.objects.filter(
order_id__table_id=table_id,
order_id=Order.objects.filter(
table_id=table_id).latest(
'table_id'))
我没有测试答案,但它可能会按预期工作
推荐阅读
- android - 在 viewpager 中更改选项卡的方法调用
- css - Bootstrap 4 - 导航栏搜索表单最小宽度
- reactjs - React 自动完成元素以及在列表中添加值(如果不存在)的选项
- node.js - 未找到 Socket.io 客户端错误 404
- aspnetboilerplate - 升级到 3.6.2 后 JSON 序列化程序不工作
- php - 限制对 PHP 上的管理按钮的访问
- c# - 如何执行取决于策略的多项操作?
- spring-boot - 收到消息 MessageDeliveryException: Dispatcher 没有订阅者时
- laravel-5.5 - Laravel 类型错误:函数参数太少
- node.js - nodejs fs.writeFile不在Windows上调用回调