首页 > 解决方案 > Django,检测object.filter是否返回0个对象

问题描述

我有这样的表结构

class Item(models.Model):
    id = models.AutoField(primary_key=True)

class Car(models.Model):
    vin_number = models.CharField(max_length=250, null=True, blank=True)
    item = models.OneToOneField(Item, on_delete=models.CASCADE)
    name = models.CharField(max_length=1000, null=True)
    year = models.IntegerField(null=True)

class Yacht(models.Model):
    name = models.CharField(max_length=1000, default='')
    boat_type = models.CharField(max_length=1000, default='', null=True)
    item = models.OneToOneField(Item, on_delete=models.CASCADE)
    description = models.TextField(default='')
    year = models.IntegerField(null=False, default=0)

所以,Car 和 Yacht 都与 Item 表有关系

如果我在请求中只有项目 ID,那么编写此类查询的正确方法是什么

    data = request.POST
    item = Car.objects.filter(item_id=data['item_id']).first()
    if not item:
        item = Yacht.objects.filter(item_id=data['item_id']).first()

有没有办法不使用 if/else 语句?

标签: djangoorm

解决方案


你需要使用exists().

Car.objects.filter(item_id=data['item_id']).exists()
Yacht.objects.filter(item_id=data['item_id']).exists()

它返回你TrueFalse。官方文档的链接。


推荐阅读