基于外键的django过滤

时间:2018-02-06 08:13:31

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

当我调用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

请帮助我了解解决方案。

提前致谢。

3 个答案:

答案 0 :(得分:0)

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

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

希望它有所帮助。

答案 1 :(得分:0)

使用exclude排除order_type id 14并使用过滤器按批次ID进行过滤

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

答案 2 :(得分:0)

你可以这样做。

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