Какой набор запросов следует выполнить, чтобы выбрать все нарушенные отношения "один к одному"?

У меня есть 2 модели:

class Asset(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    ... some other fields ...

class AssetConstructorData(models.Model):
    asset = models.OneToOneField(
        Asset,
        on_delete=models.CASCADE,
        primary_key=True,
        related_name='constructor_data',
    )
    ... some other fields ...

По некоторым историческим причинам у меня есть несколько объектов "один к одному", которые сломаны: некоторые объекты AssetConstructorData не имеют соответствующего им объекта Asset. Я хотел бы удалить все объекты AssetConstructorData, которые сломаны.

На самом деле я сделал :

for cd in AssetConstructorData.objects.all():
    try:
        cd.asset
    except Asset.DoesNotExist:
        cd.delete()

Что окончательно не оптимизировано: Можно ли сделать кверисет, который выбирает все нарушенные отношения?

Я пробовал с .filter(asset=None) и .filter(asset__isnull=True), но это не работает.

Вернуться на верх