【问题标题】:django filtering based on foreign key基于外键的django过滤
【发布时间】:2018-02-06 08:13:30
【问题描述】:

当我调用 url 时,我需要获取除 order_type =14 的订单以外的所有订单(订单表具有对 order_type 和批处理表的外键引用)。 请帮助我知道解决方案。

#models.py

class Batch(models.Model):
        batchnum = models.TextField(null=True, blank=True)
        otp= models.TextField(null=True, blank=True)

class Order(models.Model):
    reqnum = models.TextField(null=True, blank=True)
    order_date = models.DateField(auto_now_add=True, null=True, blank=True)
    batch= models.ForeignKey(Batch, db_index=True,related_name='results', on_delete=models.PROTECT,null=True, blank=True)
    order_status = models.ForeignKey('DotOrderStatus', on_delete=models.SET_NULL, null=True,related_name='dot_order_status',default=1)
    order_type = models.ForeignKey('DotOrderType', on_delete=models.SET_NULL, null=True,related_name='dot_order_type',default=10)
    slno = models.TextField(null=True, blank=True)
    customer_name = models.TextField(null=True, blank=True)
    contact = models.BigIntegerField( null=True, blank=True)


url:localhost:8000/api/v1/batch/id 

'/id' 是批次 ID

请帮助我知道解决方案。

提前致谢。

【问题讨论】:

    标签: django django-models django-rest-framework


    【解决方案1】:

    使用 exclude 排除 order_type id 14 并使用 filter 按批次 id 过滤

    Order.objects.exclude(order_type__id=14).filter(batch__id=id)
    

    【讨论】:

    • 不需要使用'__'(双下划线)。 “_”(单下划线)将起作用。
    【解决方案2】:

    您可以使用exclude 以便不包含 ID 为 14 的订单:

    batch_orders = batch.results.all().exclude(order_type__id=14)
    

    希望对你有帮助。

    【讨论】:

    • 谢谢..但我们没有批量模型订单的外键引用。
    • @JahongirRahmonov 有一个错字,我认为是 order_type batch.results.all().exclude(order_type__id=14)
    • 我们没有批量订单的外键引用。order_type 在订单模型中定义。我们必须从批量视图集中过滤订单。
    • @jsk 对于​​给定的批次对象,batch.results.all() 将给出该批次的所有订单。您可以使用订单字段进行过滤/排除。
    • @jsk 你不必有外键。您已经有一个反向外键。尝试更新。
    【解决方案3】:

    你可以这样做。

    Order.objects.filter(batch_id=id).exclude(order_type_id=14)
    

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2020-09-07
      • 2012-01-23
      • 1970-01-01
      • 2011-12-25
      • 2019-06-22
      • 2018-01-05
      • 2013-09-05
      • 2016-07-12
      相关资源
      最近更新 更多