Django:检查相关对象以及是否包含d

2024-04-18 18:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我在一个汽车管理系统(网页)中有两个模型:

    class Brand(models.Model):
        brand_name= models.CharField(max_length=100, null=False)

    class Cars(models.Model):
        car_model= models.CharField(max_length=100, null=False)
        car_production_year= models.CharField(max_length=100, null=False)
        car_brand= models.ForeignKey(Brand, null=True, blank=True, default = None)

现在,我想从汽车系统中删除一个品牌数据。如何检查此品牌是否已在其他型号中使用,或者该外键是否包含任何数据(因为我已允许car_Brand in Cars model为空-真)。

附言: 使用此功能:

self.model._meta.get_all_related_objects():

我在品牌模型类中使用了任何相关对象。但是,我不知道如何获取相关对象是否包含任何数据。


Tags: 数据模型falsemodelmodelscarnulllength
3条回答

使用exists()。它被设计用于这种情况:

for brand in Brand.objects.all():
    if not brand.cars_set.all().exists():
        # delete

而且它几乎总是比任何其他类型的检查都快,因为它的设计方式是在数据库级别工作的。您可以在docs中阅读exists()行为的详细信息

我认为最简单的方法是这样:

# brand is an instance of Brand

if not brand.cars_set.all():
    # delete
else:
    # do something else

Django docs在相当多的细节中包含外键。

this question开始,对于我的代码来说,这更快:

for b in Brand.objects.filter(cars__isnull=True):
    # delete

如果你有身份证(我的情况),我用这个(比汽车快60%:

for brand_id in brand_id_set:
    if Brand.objects.filter(id=brand_id).filter(cars__isnull=True):
        # delete

我用的是Django 1.11

相关问题 更多 >