Какой набор запросов следует выполнить, чтобы выбрать все нарушенные отношения "один к одному"?
У меня есть 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), но это не работает.